Richtige Verwendung des SMTP-Headers "Sender"?

20

Unsere Webanwendung sendet E-Mail-Nachrichten an Personen, wenn jemand neuen Inhalt veröffentlicht. Sowohl Absender als auch Empfänger haben sich dafür entschieden, E-Mail-Nachrichten von unserer Anwendung zu erhalten. Bei der Vorbereitung einer solchen Nachricht setzen wir die folgenden SMTP-Header:

VON: [email protected]
AN: [email protected]
SENDER: [email protected]

Wir haben uns dafür entschieden, die E-Mail-Adresse des Autors im FROM-Header zu verwenden, um dem Empfänger die bestmögliche Erfahrung zu bieten. Wenn sie die Nachricht in ihrem E-Mail-Client sehen, ist der Autor klar. Um das Auftreten von Spoofing zu vermeiden, haben wir den SENDER-Header (mit unserer eigenen Unternehmens-E-Mail-Adresse) hinzugefügt, um zu verdeutlichen, dass wir die Nachricht im Namen des Autors gesendet haben. Nach dem Lesen der RFCs 822 und 2822 scheint dies eine beabsichtigte Verwendung des Absender-Headers zu sein.

Die meisten empfangenden Mailserver scheinen damit gut umzugehen. Die E-Mail-Nachricht wird normal zugestellt (vorausgesetzt, das Empfängerpostfach ist vorhanden, das Kontingent ist nicht überschritten usw.). Wenn Sie jedoch eine Nachricht VON einer Adresse in einer Domäne AN eine Adresse in derselben Domäne senden, lehnen einige empfangende Domänen die Nachrichten mit einer Antwort wie der folgenden ab:

571 falsche IP - psmtp (als Antwort auf den Befehl RCPT TO)

Ich denke, dies bedeutet, dass der empfangende Server nur gesehen hat, dass sich die FROM-Header-Adresse in seiner eigenen Domäne befindet und dass die Nachricht von einem Server stammt, den er nicht als autorisiert ansieht, Nachrichten für diese Domäne zu senden. Mit anderen Worten, der empfangende Server hat den SENDER-Header ignoriert.

Wir haben eine Problemumgehung: Die Webanwendung führt eine Liste solcher Domänen, die den SENDER-Header zu ignorieren scheinen. Wenn sich die FROM- und TO-Header in einer solchen Domäne befinden, wird der FROM-Header stattdessen auf unsere eigene E-Mail-Adresse gesetzt. Diese Liste muss jedoch gewartet werden.

Gibt es einen besseren Weg, um das gewünschte Erlebnis zu erzielen? Wir möchten ein "guter Bürger" des Netzes sein, und alle Beteiligten - Absender und Empfänger - möchten daran teilnehmen und diese Nachrichten empfangen. Eine Alternative besteht darin, immer die E-Mail-Adresse unseres Unternehmens im FROM-Header zu verwenden und dem Betreff den Namen / die Adresse des Autors voranzustellen. Dies scheint jedoch etwas umständlich zu sein.

Eric Rath
quelle
Warum nicht From: authorstatt verwenden From: [email protected]?
Pacerier

Antworten:

16

Du siehst die falschen Dinge an. Das sind die Nachrichten - Header . Sie sollten sich den SMTP- Umschlag ansehen . (Wie der Umschlag angegeben wird, hängt davon ab, wie genau Ihre Anwendung Mail an das Mail-System sendet. Auf vielen Systemen wird der Umschlag durch Befehlszeilenargumente an das Mail-Übermittlungsdienstprogramm angegeben.) Abhängig davon, wann genau die Protokolltransaktion ausgeführt wird Es wird entschieden, dass der SMTP-Relay-Server möglicherweise nicht einmal die Nachrichtenkopfzeilen gesehen hat.

Der Antworttext besagt, dass der Administrator des jeweiligen SMTP-Relay-Servers, mit dem Sie sich unterhalten, eingeschränkt hat, was Sie in den SMTP-Umschlag einfügen können. Es scheint sich über den Empfängerteil des Umschlags zu beschweren. Es kann jedoch sein, dass die Validierung des Umschlagsenders auf die Angabe des ersten Empfängers verschoben wird, sodass der Absender möglicherweise beanstandet wird.

Beachten Sie, dass beim Umschlagsender Zustellstatusnachrichten gesendet werden und diese nicht an zufällige Personen auf der ganzen Welt gerichtet werden sollen. (Abgesehen von der Tatsache, dass dies vielen Leuten nicht gefällt, ist es nicht sinnvoll, dass Zustellstatusnachrichten für Ihre E-Mail an andere Personen als Sie gesendet werden.) Geben Sie sich als Absender des Umschlags an.

Es ist MXübrigens falsch, Ressourceneinträge anzufordern. Ein SMTP-Relay-Server kann in Abwesenheit von Ressourceneinträgen von Ressourceneinträgen Aund AAAARessourceneinträgen gefunden werden MX. Siehe RFC 5321 § 5.1.

JdeBP
quelle
Ich habe den RFC überprüft, bevor ich die MX-Datensatzprüfung implementiert habe, und das Gleiche gelernt: Auf einen Fallback-A-Datensatz prüfen, wenn kein MX-Datensatz vorhanden ist. Ich werde in den SMTP-Umschlag schauen. danke für den Vorschlag.
Eric Rath
Ich habe den SMTP-Umschlag recherchiert und getestet. Sie haben Recht - ich bin fälschlicherweise davon ausgegangen, dass bei jeder Herkunftsprüfung der Nachrichtenkopf "Von" verwendet wird, aber es sieht so aus, als würde stattdessen der Umschlag verwendet.
Eric Rath
5

Ich könnte mich irren, aber die wahrscheinlichste Ursache für den obigen Fehler, insbesondere im Fall von Postini, ist, dass die Domänen, auf die Sie abgelehnt werden, eine strikte SPF-Richtlinie haben. Die meisten Mail-Server mit SPF-Prüfung prüfen nur den From: -Header, der Sender-Header ist ihnen egal.

Um zu überprüfen, ob dies der Fall ist, führen Sie "dig + short TXT domain.com" aus, wobei domain.com die Fehlermeldung ausgibt. Sie sollten etwas zurückbekommen wie:

"v = spf1 mx -all"

Der wichtige Teil ist das -all. Dies bedeutet, dass der Domaininhaber angegeben hat, dass nur E-Mails von den Servern gesendet werden, die als Mailserver fungieren. Alle anderen E-Mails werden abgelehnt.

Wenn dies der Fall ist, können Sie dies zum Glück aktiv prüfen, bevor Sie die E-Mail versenden! Lassen Sie die WebApp einen SPF-Check durchführen, wenn der Benutzer seine E-Mail-Adresse eingibt. Wenn es eine strikte Richtlinie gibt, fügen Sie die Domain Ihrer Liste hinzu. An Bibliotheken für alle Sprachen, die SPF-Prüfungen durchführen können, mangelt es nicht.

Niall Donegan
quelle
Danke, das ist eine gute Idee. Ich überprüfte (mit dig) die Handvoll Domains, die bereits das unerwünschte Verhalten aufwiesen, und einige hatten SPF-Records mit ~ all. Es ist also keine vollständige Lösung, aber ich denke, es wird schwierig sein, eine vollständige Lösung für dieses Problem zu finden. Ich denke, die anderen erzwingen die gleiche grundlegende Logik, aber ohne die Informationen in SPF-Datensätzen zu speichern / zu veröffentlichen.
Eric Rath
Nach Ihrer Idee sollte eine weitere Validierungsprüfung durchgeführt werden: Die Domain der Adresse sollte einen gültigen MX-Eintrag haben. Wenn jemand seine E-Mail-Adresse falsch eingibt und der Fehler in den Domain-Teil der Adresse fällt (z. B. [email protected]), schlägt die Zustellung fehl, da kein MX-Eintrag für die Domain gefunden werden kann (vorausgesetzt, der Fehler hat nicht zu einem geführt) andere, aber immer noch gültige Domain).
Eric Rath
Ich habe den "akzeptierten Antworter" in "JdeBP" geändert - die Unterscheidung zwischen dem Nachrichtenkopf und dem Umschlagkopf hat es wirklich getroffen. Aber danke für die Rückmeldung.
Eric Rath
5
Korrektur: SPF überprüft das "MAIL FROM" im Umschlag, nicht die Header "From" oder "Sender".
Simon East