Wie kann Sendmail allen eingehenden E-Mail-Nachrichten einen Header mit den entsprechenden Empfängern hinzufügen?

Wie kann Sendmail allen eingehenden E-Mail-Nachrichten einen Header mit den entsprechenden Empfängern hinzufügen?

Haftungsausschluss:Ich habe einige der Fragen und Artikel hier und anderswo gelesen, die sich mit dem Umschreiben von Sendmail-Headern befassen. Ich habe keine Antwort auf die folgende Frage gefunden, da sich die anderen Fragen hauptsächlich aufUmschreibenHeader (anstatt sie hinzuzufügen), und fast alle beziehen sich aufausgehendNachrichten und der UmschlagAbsender(anstelle des Umschlagempfängers).

Nachdem dies gesagt wurde:

Ich betreibe einen Mailserver mit Sendmail 8.14.4 unter Debian Jessie.

Es gibt einige E-Mail-Empfängeradressen, die demselben O/S-Benutzerkonto zugeordnet sind. Wenn der jeweilige O/S-Benutzer die Nachrichten liest, kann er nicht feststellen, an welche E-Mail-Adresse die Nachrichten ursprünglich gesendet wurden.

Aus diesem Grund möchte ich, dass Sendmail allen eingehenden E-Mail-Nachrichten einen benutzerdefinierten Header mit den Umschlagempfängern hinzufügt.

Ich denke, ich kann mein Problem anhand eines Beispiels besser erklären:

Angenommen, ich habe zwei E-Mail-Adressen [email protected]und [email protected]. Beide sind dem O/S-Benutzerkonto zugeordnet offers. Das funktioniert soweit: Der O/S-Benutzer offersruft beim Abrufen seiner E-Mails alle an [email protected]und gesendeten Nachrichten ab [email protected].

Das Problem besteht nun darin, dass er nicht feststellen kann, an welche E-Mail-Adresse welche Nachricht ursprünglich gesendet wurde. Das heißt: Obwohl er alle Nachrichten sieht, die an beide E-Mail-Adressen gesendet wurden, kann er nicht erkennen, ob eine bestimmte Nachricht ursprünglich an [email protected]oder an gesendet wurde [email protected].

Daher möchte ich jeder eingehenden Nachricht einen benutzerdefinierten Header hinzufügen, vielleicht so etwas wie: X-Envelope-Recipient: <Original envelope recipient>.

Was wäre der einfachste Weg, dies zu tun?

Es war einmal, da habe ich ein paar einfache benutzerdefinierte Regeln für Sendmail geschrieben. Aber seitdem sind fast 15 Jahre vergangen, also möchte ich das vermeiden und hoffe daher, dass es eine einfache Lösung gibt oder dass mich jemand in die richtige Richtung weisen kann. Ehrlich gesagt scheint es mir derzeit einfacher, einen Milter zu schreiben, um mein Problem zu lösen, als die Regelsyntax von Sendmail neu zu lernen ...

BEARBEITEN 1

Wie von @AnFi angefordert, hier die lokale Mailerdefinition von sendmail.cf:

Mlocal,         P=/usr/lib/sm.bin/mail.local, F=lsDFMAw5:/|@qPSXnz9, S=EnvFromSMTP/HdrFromL, R=EnvToL/HdrToL,
                T=DNS/RFC822/SMTP,
                A=mail.local -l -h inbox

Antwort1

Ihre Frage wird von Sendmail.org FAQ 3.29 beantwortet

3.29 Wie kann ich einen Header hinzufügen, der den tatsächlichen Empfänger angibt, wenn mehrere Benutzer in einer virtuellen Domäne auf ein einziges Postfach zugreifen?

Kurzversion: Verwenden Sie virtusertable und~offers/.procmailrc

virtuelle Tabelle:

[email protected]  offers+offer1
[email protected]  offers+offer2

~offers/.procmailrcsollte "plus Details" erhalten in $1.
ODER
Sie können $h (auf +detail gesetzt) ​​in benutzerdefinierten Headern verwenden

Warnung: Sie erhalten/verarbeiten zwei Kopien einer Nachricht, die an beide adressiert ist [email protected]und[email protected]

Antwort2

Was Sie vorschlagen, wäre gegen das SMTP-Protokoll: Es gibt legitime Gründe, Adressen zum RCPT TOBefehl hinzuzufügen, obwohl sie nicht in den Headern To:oder vorhanden sind Cc:, d. h.RFC 5321 7.2.„Blinde“ Kopien (Hervorhebung von mir):

Adressen, die nicht im Nachrichtenkopfbereich erscheinen, können aus verschiedenen Gründen in den RCPT-Befehlen an einen SMTP-Server erscheinen. Die beiden häufigsten Gründe sind die Verwendung einer Mailingadresse als „Listenexplosor“ (eine einzelne Adresse, die in mehrere Adressen aufgelöst wird) und das Auftreten von „Blindkopien“. Insbesondere wenn mehr als ein RCPT-Befehl vorhanden ist und um zu vermeiden, dass der Zweck dieser Mechanismen zunichte gemacht wird,SMTP-Clients und -Server sollten NICHT den vollständigen Satz der RCPT-Befehlsargumente in den Header-Abschnitt kopieren, weder als Teil von Trace-Header-Feldern noch als Informations- oder Private-Extension-Header-Felder.. Da diese Regel in der Praxis oft verletzt wird und nicht durchgesetzt werden kann, KÖNNTE es für sendende SMTP-Systeme, die die Verwendung von „bcc“ kennen, hilfreich sein, jede Blindkopie als separate Nachrichtentransaktion zu senden, die nur einen einzigen RCPT-Befehl enthält.

Es besteht keine inhärente Beziehung zwischen „Reverse“- (von MAIL-, SAML- usw. Befehlen) oder „Forward“- (RCPT) Adressen in der SMTP-Transaktion („Umschlag“) und den Adressen im Header-Abschnitt. Empfangssysteme sollten NICHT versuchen, solche Beziehungen abzuleiten und sie zu verwenden, um den Header-Abschnitt der Nachricht für die Zustellung zu ändern. Das beliebte Apparently-toHeader-Feld stellt einen Verstoß gegen diesen Grundsatz dar, ist eine häufige Quelle unbeabsichtigter Informationsoffenlegung und SOLLTE NICHT verwendet werden.

Der nicht empfohlene Apparently-toHeader wird mit der Option gesteuert NoRecipientAction=action.

Legen Sie das Verhalten für den Fall fest, dass in der Nachricht keine Empfängerheader ( To:, Cc:oder ) vorhanden sind:Bcc:

  • nonelässt die Nachricht unverändert,
  • add-tofügt eine To:Kopfzeile mit den Umschlagempfängern hinzu,
  • add-apparently-tofügt eine Apparently-To:Kopfzeile mit den Umschlagempfängern hinzu,
  • add-bccfügt einen leeren Bcc:Header hinzu und
  • add-to-undisclosed fügt einen Header mit der Aufschrift hinzu 'To: undisclosed-recipients:;'.

Bitte beachten Sie, dass die ursprüngliche Empfängeradresse normalerweise bereits im Header To:oder enthalten ist Cc:. Sie sollte nicht in den Namen des Benutzerkontos geändert werden offers, daher ist sie entweder [email protected]oder [email protected]verborgen. Das Umschreiben von Headern ist noch gefährlicher geworden, da es auch DKIM-Signaturen beschädigen kann. Der einzige sinnvolle Anwendungsfall ist das Umschreiben von Adressen für E-Mails mit lokalem Ursprung ( useran [email protected]).


Das Hinzufügen einer Liste aller RCPT TOAdressen würde das Protokoll verletzen, aber eigentlich braucht man einfach nur dieeinzelne RCPT TOOriginaladressefür den Benutzer, an den die Mail gesendet wurde. Ich weiß nicht, wie ich das mit Sendmail erreichen kann, aberPostfix(mit der Standardkonfiguration)fügt einenX-Original-To:Header, der genau dies enthält, und zusätzlich einen Delivered-To:Header, der das interne Zielpostfach enthält ( [email protected]).

verwandte Informationen