de.comp.lang.php.* FAQ

15.10. Wie kann ich überprüfen, ob eine versendete Mail tatsächlich angekommen ist?

Antwort von Kristian Köhntopp

Manche Mailer unterstützen Delivery Status Notification (DSN) nach RFC 1894. Dies ist ein RFC auf der Internet Standards Track im Status proposed standard, er wird also in veränderter Form einmal Draft Standard und dann Internet Standard werden. Relevant im selben Zusammenhang ist die ganze Reihe der RFCs in diesem Bereich:

  • RFC 1891 (SMTP Service Extension for Delivery Status Notifications)

  • RFC 1892 (The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages)

  • RFC 1893 (Enhanced Mail System Status Codes)

  • und der bereits genannte RFC 1894 (An Extensible Message Format for Delivery Status Notifications)

Die Anforderung von DSNs erfolgt mit Hilfe der in RFC 1891 beschriebenen SMTP Service Extension, ist also Bestandteil des SMTP Dialoges.

Auf Unix-Systemen wird der SMTP-Dialog durch das lokal installierte sendmail-Programm abgewickelt. Dieses versteht bestimmte Optionen (-N und -R, die in der Manualpage von sendmail beschrieben sind), mit deren Hilfe DSNs angefordert werden können. Die Option -N <reportklasse> legt fest, für welche Fälle DSNs erzeugt werden sollen. Es können mehrere Reportklassen durch Komma getrennt spezifiziert werden: failure, wenn eine Benachrichtigung bei Zustellproblemen erzeugt werden soll, delay für eine Benachrichtigung bei Zustellverzögerungen und success, für Nachricht, wenn die Zustellung erfolgreich war. Mit der Zustellbenachrichtigung wird zugleich ein Teil der Originalnachricht zurück übermittelt, damit der Absender feststellen kann, auf welche Nachricht sich die Zustellbenachrichtigung bezieht. Die Option -R <return> legt fest, wieviel von der Originalnachricht zurück übermittelt werden soll: hdrs übermittelt nur die Headerzeilen der Originalnachricht zurück, während full die komplette Originalnachricht in der Zustellbenachrichtigung zurückgibt.

Auf Unix-Systemen kann man also DSNs anfordern, wenn man einen ausreichend neuen Sendmail (8.8.x oder besser) installiert hat und man die Konfigurationsvariable sendmail_path passend setzt:

sendmail_path = /usr/lib/sendmail -N failure,success -R hdrs -t

Auf Windows-Systemen wickelt PHP den SMTP-Dialog mit einem entfernten SMTP-Mailer ab. Es sind keine Eingriffsmöglichkeiten vorgesehen, mit deren Hilfe man den SMTP-Dialog erweitern kann. Entscheidet man sich, den SMTP-Dialog manuell abzuwickeln, damit man die SMTP-Erweiterungen gemäß RFC 1891 implementieren kann, ist unbedingt darauf zu achten, dass man das Vorhandensein dieser Erweiterungen im EHLO-Kommando des SMTP-Dialoges richtig abfragt, sonst schlägt die Mailzustellung fehl, wenn man auf einem Mailer einliefert, der kein DSN kann.

Das Resultat von aktivierten DSNs sind Nachrichten mit dem Mime-Typ multipart/report wie in RFC 1892 und RFC 1894 spezifiziert. Diese Nachrichten enthalten mindestens zwei, meist jedoch drei Teile, von denen einer message/delivery-status ist und eine maschinenlesbare DSN nach RFC 1894 enthält. Mit Hilfe eines POP3 oder IMAP-Clients kann man diese Nachrichten einsammeln und analysieren.

Valid HTML 4.01! Valid CSS!

15.10. Wie kann ich überprüfen, ob eine versendete Mail tatsächlich angekommen ist?
http://www.php-faq.de/q/q-mail-zustellung.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team