ABC skryptów CGI

Wstecz Dalej

Wysyłamy dane pocztą

Często spotykana na stronach WWW jest również sytuacja, że dane z formularza przesyłane są e-mailem na adres autora strony. Oto przykład prostego, uniwersalnego skryptu, pozwalającego wysyłać e-mailem na wskazany adres dane z całkowicie dowolnych (!) formularzy. W przeciwieństwie do poprzednich przykładów, ten działa tylko na serwerach unixowych z uwagi na wykorzystanie standardowego systemowego programu sendmail, obsługującego wysyłanie poczty elektronicznej (niektóre instalacje używają wprawdzie innego systemu transportu poczty, jak np. Qmail bądź Exim, jednak z uwagi na kompatybilność zwykle także zawierają program o nazwie /usr/lib/sendmail, za pomocą którego można wysyłać pocztę).

     #!/usr/bin/perl
     use CGI;
     CGI::ReadParse(*form);

     $adres = "user\@serwer.com";   # tu musimy wpisać adres

     open (MAIL,"| /usr/lib/sendmail -t");
     print MAIL <<"KONIEC";
     To: $adres
     Subject: formularz
     MIME-Version: 1.0
     Content-type: text/plain; charset=iso-8859-2
     Content-transfer-encoding: 8bit

     Adres komputera: $ENV{'REMOTE_HOST'} ($ENV{'REMOTE_ADDR'})
     Dane z formularza:

     KONIEC

     foreach $pole (keys(%form)) {
        print MAIL "$pole: $form{$pole}\n";
     }
     close (MAIL);

     print <<"KONIEC";
     Content-type: text/html; charset=iso-8859-2

     <html>
     <head><title>Potwierdzenie</title></head>
     <body>
     <h1>Dziękujemy !</h1>
     Wiadomość została przesłana. Oczekuj odpowiedzi wkrótce.
     </body>
     </html>
     KONIEC
W zmiennej $adres musimy umieścić adres e-mailowy, pod który mają być wysyłane listy. Nowsze wersje Perla traktują znak "@" jako specjalny i wymagają poprzedzania go w stałej tekstowej znakiem "\", stąd też taki zapis zastosowaliśmy w skrypcie. Następnie otwierany jest potok do programu sendmail. Do tego potoku wypisywać będziemy treść listu (wraz z nagłówkami). Znaczenie pól nagłówka To (niezbędne do wysłania listu!) oraz Subject jest oczywiste; pola MIME-Version, Content-type i Content-transfer-encoding są niezbędne do prawidłowego zinterpretowania przez systemy pocztowe polskich liter, jeżeli takowe będą występować w treści listu. Pozostałe potrzebne pola, w tym m.in. From i Date, zostaną automatycznie uzupełnione przez program sendmail. Nagłówek oddzielony jest od treści listu pustym wierszem (podobnie jak w przypadku nagłówka HTTP).

Główną część listu generuje pętla foreach, wypisująca zawartośc wszystkich pól formularza. Funkcja keys pozwala na uzyskanie listy wszystkich nazw tych pól, będących indeksami w tablicy asocjacyjnej form. Każda z tych nazw jest kolejno podstawiana do zmiennej $pole i w treści listu umieszczany jest wiersz zawierający tę nazwę oraz zawartośc odpowiedniego elementu tablicy. Jako uzupełniające dane umieszczamy w treści listu adres domenowy oraz IP komputera, z którego wypełniano formularz.

W wyniku wywołania takiego skryptu - np. z przykładowego formularza omawianego w poprzednim rozdziale - adresat otrzymuje list jak na rys.11.


Wstecz Dalej

Jarosław Rafa 2000. Tekst udostępniony na licencji Creative Commons (uznanie autorstwa - użycie niekomercyjne - bez utworów zależnych). Kliknij tutaj, aby dowiedzieć się, co to oznacza i co możesz z tym tekstem zrobić. W razie jakichkolwiek wątpliwości licencyjnych bądź w celu uzyskania zgody na rozpowszechnianie wykraczające poza warunki licencji proszę o kontakt e-mailem: raj@ap.krakow.pl.

Wersja HTML opracowana 11.10.2000.


Powrót do spisu treści Statystyka