de.comp.lang.php.* FAQ

15.3. Unix: Wie funktioniert der Mailversand?

Keywords: Mail | Unix | Versand | sendmail | Mailserver

Antwort von Kristian Köhntopp

Ein Unix-System hat in der Regel ein Mailprogramm installiert, das Anfragen an das DNS-System stellen kann oder auf andere Weise die zur Auslieferung der Mail benötigten Informationen beschaffen kann. In den meisten Fällen ist dieses Mailprogramm /usr/lib/sendmail (oder /usr/sbin/sendmail) und versteht eine Option -t, die bewirkt, dass man das Programm starten und eine Mail mit allen benötigten Headern auf der Standardeingabe hinterlassen kann. Das Programm wird dann auf der Basis der erhaltenen Headerinformationen den Envelope generieren, den Header vervollständigen und ggf. korrigieren, bevor die Mail dann abgesendet wird.

Der einfachste Weg, um ein Programm zu starten und dann seine Standardeingabe mit Daten zu füllen, ist die C-Funktion popen(). Die PHP-Funktion mail() verwendet diese C-Funktion, um das durch die Konfigurationsvariable sendmail_path definierte Mailprogramm zu starten und mit den benötigten Daten zu füttern.

  mail("em@pfaeng.er",
     "Testmail",
     "Dies ist nur eine Testnachricht.",
     "From: ab@send.er\r\nReply-To: devnull@send.er");

Hinweis: In vielen Versionen von PHP unter Windows funktioniert die Variante von mail() mit drei Parametern wegen eines Fehlers im Interpreter nicht. In diesem Fall ist die Funktion mail() zwingend mit vier Parametern aufzurufen, etwa indem als vierter Parameter der Wert Content-Type: text/plain; charset=iso-8859-1 angegeben wird.

Alternativ kann man diese Funktionalität auch manuell in PHP nachprogrammieren, also die PHP-Funktion popen() aufrufen und die Mail dann ausgeben. Beide Ansätze sind funktional gleich (aber mail() ist weniger Arbeit).

  $fd = popen("/usr/sbin/sendmail -t ","w");
  fputs($fd, "To: em@pfaeng.er\r\n");
  fputs($fd, "From: ab@send.er\r\n");
  fputs($fd, "Reply-To: devnull@send.er\r\n");
  fputs($fd, "Subject: Testmail\r\n\r\n");
  fputs($fd, "Das ist nur eine Testnachricht.\r\n");
  pclose($fd);

Valid HTML 4.01! Valid CSS!

15.3. Unix: Wie funktioniert der Mailversand?
http://www.php-faq.de/q/q-mail-unix.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team