[ 06. March 2000]
- Svato_Straka
Odoslanie mailu z formulßra - 11. Φas¥ CGI
Dnes si ukß₧eme, ako pomocou CGI vytvori¥ skript, ktor² odoÜle dßta z formulßra na strßnke na vßÜ e-mail. Vyu₧ijeme k tomu program sendmail a perlovsk² modul CGI.pm.
╚o teda budeme potrebova¥? V prvom rade to bude strßnka s formulßrom, do ktorΘho u₧φvate╛ zadß svoje meno, e-mailov· adresu, predmet sprßvy a jej znenie. ╧alej to bude samotn² skript, ktor² sprßvu spracuje a odovzdß programu sendmail. Ako poslednß s·Φas¥ to bude strßnka, ktorß sa zobrazφ po odoslanφ mailu ako po∩akovanie.
Nebudem sa tu zaobera¥ vytvorenφm formulßru pre sprßvu ani strßnky s po∩akovanφm. Toto by ste mali predpokladßm vÜetci zvlßdnu¥. Upozornφm tu na to, ₧e skript je pφsan² "univarzßlne", to jest m⌠₧ete ho zavola¥ pomocou met≤dy GET i POST. Pomerne ve╛k²m pomocnφkom je tu modul CGI. Tu je zdrojov² k≤d skriptu:
use CGI;
$mail = "developer@developer.sk";
$sendmail = "/usr/bin/sendmail -t -n -oi";
$qry = new CGI();
$from = $qry->param('meno');
$email = $qry->param('email');
$subject = $qry->param('subject');
$message = $qry->param('msg');
open(SENDMAIL, "| $sendmail");
print SENDMAIL <<HlavickyMailu;
From: $from <$email>
To: $mail
Reply-To: $email
Subject: $subject
X-Remote-Host: $ENV{REMOTE_ADDR}
HlavickyMailu
print SENDMAIL "n", $message;
close SENDAMIL;
$qry->redirect('http://www.developer.sk/thanks.html');
Funkcia skriptu je jednoduchß. Na zaΦiatku si do premennej $mail ulo₧φme adresu, na ktor· bude sprßva odoslanß. Do premennej $sendmail ulo₧φme pln· cestu k programu sendmil aj s potrebn²mi flagmi. Flag -t zaistφ, ₧e sendamil sa bude sna₧i¥ nßjs¥ hlaviΦku To:, v ktorej bude zadanß adresa na ktor· sa mß sprßva posla¥. Flag -n potom zaistφ, aby sa nepou₧φvali aliasy adries (pok²m by ste skript rozÜφrili tak, aby u₧φvate╛ mohol zada¥ sßm adresu, mohol by bez vo╛by -n pou₧φva¥ vami definovanΘ aliasy a to asi nechcete).
╧alÜφm krokom je vytvorenie novΘho CGI objektu $qry . Volanie $qry->param('nazov_parametru') vrßti hodnotu danΘho parametru. (Bli₧Üie info o module CGI vi∩. perldoc CGI). V naÜom skripte teda do premenn²ch $from, $email, $subject a $message vlo₧φme hodnoty polφ meno, email, subject a msg z formulßra vyplnenΘ u₧φvate╛om. Odpor·Φam spravi¥ kontrolu zadania polφ vo formulßri pomocou JavaScriptu u₧ na samotnej strßnke, uÜetrφte tak nejakΘ tie prostriedky pri behu skriptu. Minimßlne polia meno (premennß $from) a email (premennß $email) by mali by¥ zadanΘ.
╧alÜφm krokom po naplnenφ premenn²ch je otvorenie r·ry k programu sendmail pomocou prφkazu open . Do nej potom zapisujeme hlaviΦku mailu obsahuj·cu polia From, To, Reply-To, Subject a X-Remote-Host. V²znam prv²ch Ütyroch je jasn². Piata polo₧ka hlaviΦky, X-Remote-Host , je definovanß u₧φvate╛om a program sendmail ju nevy₧aduje. Obsahuje IP adresu u₧φvate╛ovho stroja (resp. proxy za ktor²m u₧φvate╛ sedφ) a je pridanß z d⌠vodu, ₧e vßm m⌠₧e prφs¥ mail s vymyslen²m menom a e-mail adresou. Takto potom aspo≥ viete, z akej IP bol tento mail odoslan² ;-)
Po hlaviΦke mailu nasleduje prßzdny riadok, ktor² odde╛uje hlaviΦku od samotnej sprßvy. Po zapφsanφ sprßvy sa uzavrie r·ra k sendmailu a t²m sa sprßva odoÜle. A₧ ke∩ je skutoΦne odoslanß je zavolanß met≤da redirect objektu $qry , ktorß presmeruje u₧φvate╛ov browser na strßnku s po∩akovanφm za odoslanie sprßvy.
Tu si m⌠₧ete pozrie¥ skript v praxi
|
|
|