Mail in CGIs

Hier sind einige Notizen über das Senden von eMails mit CGI-Skripten

Empfänger

Die eMail-Adresse des Empfängers soll immer geprüft werden. Am besten wird nach RFC822 geprüft. Die Datei rfc822-syntax.txt enthält eine Perl Regular Expression, die eine eMail-Adresse nach RFC822 prüft.

Weitere Möglichkeiten:

Besonders gefährlich sind eMail-Adressen, die von einem HTML-Formular kommen. Bei back ticks (`kommando`) in Perl (oder PHP in nicht safe Mode) ist große Vorsicht geboten: Zeichen wie Strichpunkt (;) innerhalb einer eMail-Adresse in eine Anweisung wie
    system("/usr/lib/sendmail -t $form_address < $input_file");
können verheerende Auswirkungen haben: Wenn $input_file einen Strichpunkt enthält, kann der Benutzer beliebige Anweisungen auf dem CGI-Server ausführen lassen!

Das PHP-Skript  (hier als lesbare Text-Datei - Leider wird diese Datei mit M$ Internet Exploder falsch angezeigt.) zeigt, wie man die Prüfungen mit PHP machen kann.

Headers

Damit eine eMail ankommt, sind einige Headers notwendig:

To:eMail-Adresse
notwendig (sonst kommt's nirgendwo an)
Subject:Text
Betreff: sollte immer vorhanden sein. Wenn Nicht-ASCII-Zeichen vorkommen, sollen sie mit der entsprechenden Zeichensaztcodierung versehen werden (s. unten).
From:eMail-Adresse
sollte immer dabei sein.
Reply-to:eMail-Adresse
notwendig, wenn der Empfänger seine Antwort an jemand anderen als an den Absender schicken soll,
return-path:eMail-Adresse
ist immer dabei; gibt die Adresse an, an die nicht lieferbare eMails zurückgeschickt werden. Wer die Fehlermeldung bekommt, wird unten beschrieben.
Content-Transfer-Encoding:
wenn nicht angegeben, wird 7BIT als Wert angenommen. Dies bedeutet, dass nur 7-Bit-ASCII-Zeichen in der eMail vorkommen. Wenn man Umlaute verwenden will muss der Wert quoted-printable hier stehen. (Weiteres zu quoted-printable s. unten)
MIME-Version: 1.0
nur notwendig, wenn Attachments dabei sind, ist aber immer sinnvoll.
X-Mailer:Name des Mail-Programms
Diese Angabe ist nicht zwingend notwendig. Einige Mail-Server (z.B. GMX und Hotmail) ignorieren Mails, die keinen X-Mailer-Header haben. (Sie betrachten solche eMails als Spam.) Man könnte etwas wie
  PHP-Mailer (Uni-Regensburg.de
Institut)
benutzen.

Nicht zustellbare eMails

Was mit einer nicht zustellbaren eMail passiert ist etwas kompliziert zu beschreiben. Die Fehlermeldung geht an die eMail-Adresse, die im "return-path:"-Header in der eMail steht. Dieser Header wird meist vom Mailprogramm automatisch erzeugt. Unsinnigerweise wird diese Adresse in der Literatur "from-address" genannt, obwohl sie mit dem "From:"-Header nichts zu tun hat. Sie wird folgendermaßen festgelegt:

  1. Ist beim Mailprogramm eine from-addresse vorhanden, so wird diese Adresse verwendet;
  2. ist keine from-addresse aber ein "Return-Path"-Header vorhanden, so wird dies verwendet;
  3. ist gar kein return-path vorhanden, fügt der SMTP-Server der Uni die Mailbox des Unix-Benutzers ein, was in diesem Fall nicht funktioniert, da der "Benutzer" für PHP-Skripten auf dem CGI-Server nur auf diesem Rechner existiert;
  4. kann keine from-addresse gefunden werden, so wird die Meldung an root@rss1.rz.uni-regensburg.de geschickt, der sieht, dass sie von rss7 kommt und schickt sie weiter an mich (Webmaster)

Das Mailprogramm auf dem CGI-Server heißt sendmail und kann auch durch Parameter konfiguriert werden.

Folgende Notizen sind aus einigen Testsversuchen entstanden. Sie formulieren die obigen Ergebisse etwas anders:

Empfehlungen

Umlaute und andere Sonderzeichen in eMails

Im Text benutzt man das sog "quoted-printable". In Headers muss der entsprechende Code verwendet werden. Beispielskript

Weiteres kommt erst

Attachments

kommt erst


Stand 02.12.02. © Universität Regensburg, Mike Middleton.