Sven Rautenberg: E-Mail Adresse auf Erreichbarkeit prüfen - workaround?

Beitrag lesen

Moin!

Mein aktuelles Projekt ist ein Newslettersystem. Wir haben ca. 1000 E-Mail Adressen wovon jetzt schon ein paar viele als Datenleichen bekannt sind. Nun wird gewünscht, dass bei bzw. nach dem abschicken die E-Mailadressen ausgefiltert werden, die nicht erreicht werden konnten.

Das geht nicht - du kannst höchstens (schlecht) raten. z.B. indem du die Bounce-Mails auswertest und gut rätst - prinzipiell sind E-Mails als Fire-and-Forget-Waffe konzipiert.

Nein, das stimmt nicht. Das Mailsystem ist so konzipiert, dass die Mail im Prinzip nirgendwo verloren geht, irgendein Server hat sie immer.

Im Falle der Unzustellbarkeit gibt es zwei Szenarien:

1. Die alte Methode war, dass der Zielmailserver (laut Maildomain) die Mail einfach mal annimmt und nach dem Empfang schaut, ob er den zugehörigen User finden und die Mail dort zustellen kann. Gründe für das Scheitern sind z.B. "Postfach voll", "Serverfestplatte voll" oder "User existiert nicht". Wenn die Zustellung scheitert, schickt dieser Mailserver dem (angeblichen) Absender eine Fehlermail zurück, in der das Scheitern der Zustellung samt Grund verkündet wird, und ggf. noch der gesamten oder einen Teil der originalen Mail dranhängt, damit der Sender sich erinnert, um welche Mail es ging.

Weil die Senderangabe beliebig gefälscht sein kann (Spammer), machen das heutzutage nur noch ganz selten Server - aktuell ist:

2. Die aktuelle Methode ist, dass der Zielmailserver den Empfang der Mail direkt ablehnt, wenn er irgendeinen Grund kennt (darunter die oben genannten Gründe, aber möglicherweise auch Spamfilterregeln). Dadurch hat der sendende Mailserver dann das Problem auf seiner Seite und wird vermutlich eine Fehlermail nach obigem Schema generieren und seinem User oder dem Admin zustellen.

Ob die Mailboxen tatsächlich existieren, kannst du unmöglich prüfen. Und selbst einfache DNS-Tests sind sehr kritisch zu betrachten, wenn kein MX-Eintrag vorhanden ist, muss das nicht heißen, dass es keinen gibt - kurzfristige DNS-Fehler sind nicht so ungewöhnlich.

Ob Mailadressen existieren, weiß man, wenn man nach dem Mailversand positiv eine Rückmeldung vom User erhalten hat. Beispielsweise, weil dieser aufgrund einer Bestätigungsmail einen Anmeldelink geklickt hat (das für eigentlich Alles obligatorische Verfahren). Außerdem weiß man definitiv, dass eine Mailadresse nicht mehr existiert, wenn der Zielmailserver den Empfang final abgelehnt hat, auch nach mehrfachem, zeitlich auseinanderliegenden Neuversuchen. Solche Mailadressen löscht man tunlichst wieder aus seiner Verteilerliste.

Und genau das ist ja hier das Problem. Mails sind unzustellbar - wie kriegt man das mit, und zwar auf PHP-Seite?

Hier muss eine Regel definiert werden, ab wann eine E-Mail-Adresse ungültig ist.

z.B. man bekommt über 6 Monate hinweg eine Over-quota-Fehlermeldung kann es sein, dass der Empfänger grade im australischen Outback ist und 2 Monate später seine Mails wieder abfrägt.

Wer 6 Monate lang ein nicht empfangsbereites Mailpostfach hat, fliegt vom Verteiler. Da würde ich schon viel früher eingreifen wollen, nämlich sofort, wenn der Mailserver finales "Finito" signalisiert, und nach vermutlich zwei bis drei Newslettern, wenn der Server jedes Mal softfail bis zum Timeout mitteilt, so dass die Mail effektiv nicht zustellbar war.

Ist es vielleicht möglich bei einem Fehlerhaften zustellen einer E-Mail eine Webadresse an zu steuern?

Nein - aber du kannst einen Return-Path einrichten (RFC 2822) und per Cronjob diese Mailbox abfragen und auswerten.

Das löst das Problem nur teilweise. Wenn man nur "PHP auf Webseiten" kann, hat man keine Chance, wieder an Mails ranzukommen, die einmal abgeschickt wurden. Man muss irgendwie Kontakt zum Mailserver aufnehmen, und sich dann dummerweise auch intensiver mit dem Aufbau von Mails befassen.

Ist die Frage, ob jemandem, der nur "PHP auf Webseiten" kann, nicht schon "Cronjob" zu komplex ist, und ggf. auch unerreichbar wegen der aktuellen Hosting-Situation.

Man kann PHP als Skript auch direkt an den Mailserver anflanschen und die scheiternden Mails direkt zurückbekommen, in PHP auswerten und dann in der Datenbank "behandeln".

Wenn nein, ist es möglich bei der "Mail delivery failed" Mail nur Text an zu zeigen, wenn eben diese zurück gesendet wird.

Das kann der Webserver zu diesem Zeitpunkt nicht wissen.

Der Webserver weiß sowieso nix von Mail.

Also einen Text nicht bei original sondern nur bei fehler mail anzeigen? Dann könnte man für den Empfänger dieser mail (sprich einem redkateur von uns) ein link hinterlegen. Dann muss dieser link eben manuell betätigt werden, wrüde aber auch Zeit sparen.

Ob manuell oder automatisch ist hier egal - es muss ausgewertet werden und eine Regel definiert werden - ob da nun ein Link zum manuellen bestätigen dazwischenhängt ist wurst.

Generell Vorschläge oder lösungen?

Siehe oben :)

Dazugesagt sei: viele Mailserver geben gar keine Fehlermeldungen raus, wenn eine Mailbox nicht existiert, ansonsten wäre es zu einfach zu prüfen, welche tatsächlich existieren (wäre also ein Vorteil für Spammer).

Doch, Mailserver akzeptieren entweder Mails - dann stellen sie sie ihrem User auch zu, und wenn der sie löscht, egal ob wegen Spamfilter automatisiert oder manuell, ist es sein Problem - oder sie verweigern den Empfang (und geben an dieser Stelle schon gewisse Auskünfte über die Gründe, denn der legitime Sender sollte ja erkennen können, warum der Versuch scheiterte).

Spammer haben viel einfachere Quellen, an Mailadressen zu gelangen, und es ist ihnen auch egal, wieviele von den Adressen "echt" sind, und wieviele im Nirvana landen oder abgelehnt werden. Spammer verdienen, weil ein mikroskopisch kleiner Teil der übrigbleibenden Empfänger auf die Angebote der Spam-Mail eingeht und Umsatz bzw. Gewinn produziert, bzw. weil jemand, der uninformiert oder skrupellos genug ist, Marketing via Spam zu betreiben, einen Spamverteiler beauftragt, seine Werbebotschaft in die Welt zu verteilen.

- Sven Rautenberg