X-original-to fehlt im header jeder Mail

postfix

#1

Hallo,

Im aktuellen UCS/Kopano wird das “x-original-to” Feld nicht in die Mail geschrieben (bei uns vor allem wichtig bei Weiterleitungen von Aliasen an Mailboxen). Dieses Feld ist aber zwingend für die weitere Verarbeitung notwendig (ein Ticketing System, dass diese Mailbox ausliest und anhand der x-original-to Adresse entsprechend verfährt).

Wie kann ich dieses Haeder Feld in die alle eingehenden Mails bekommen?

Jan


#2

Moin,

das sollte sich mit der Zeile

header_access = regexp:/etc/postfix/header_access

in der /etc/postfix/main.cf (ueber das Template einfuegen) und in /etc/postfix/header_access dann

/^To: (.*)$/ PREPEND x-original-to: ${1}

erledigen lassen.


#3

Hallo,

habe es Testhalber direkt in die main.cf geschrieben und die Datei /etc/postfix/header_access mit obigem Inhalt erstellt.
Dann postfix neu gestartet und eine testmail gesendet. Diese hat aber keinen x-original-to header Eintrag

jan


#4

Huhu,

Postfix ist das Programm, das den Header einfügen muss. X-Original-To soll ja den Envelope-Empfänger enthalten, also die Ziel-Adresse, die im SMTP-Dialog im RCPT TO:… geschickt wird. Damit ist auch klar, dass der Tipp mit den header_checks nicht das tut, was Sie wollen, denn der würde den Empfänger aus den Mailheadern nehmen, und nicht den Envelope-Empfänger. Im Fall der Nutzung von Bcc (und auch wenn der lokale User nicht im To sondern im Cc steht) wäre X-Original-To also falsch.

Leider kann man Postfix nicht anweisen, immer den X-Original-To-Header zu setzen, denn diese Funktionalität ist im jeweiligen Mail-Transport-Modul angesiedelt. Die Einlieferung von Postfix zu Kopano erfolgt unter UCS standardmäßig über das Protokoll LMTP, und genau der lmtp-Transport kann diese Header nicht setzen.

Welcher Transport sie setzen kann, ist der pipe-Transport, der zur Einlieferung ein externes Programm ausführt und die Mail an dieses Programm übergibt. Glücklicherweise liefert Kopano einen solchen LDA (»local delivery agent«) mit: /usr/sbin/kopano-dagent (der erledigt übrigens sowohl LMTP als auch Einlieferung via Pipe). Damit der anstelle des LMTP-Protokolls genutzt wird, sind einige Anpassungen nötig:

Es muss in Postfix ein neuer Transport definiert werden. Dazu ergänzen Sie die /etc/postfix/master.cf.local:

kopano unix  -       n       n       -       10      pipe
  flags=ODRhu user=kopano argv=/usr/sbin/kopano-dagent -R ${recipient}

Die Flags O und D sorgen dafür, dass die Header X-Original-To respektive Delivered-To eingefügt werden. Mehr dazu siehe man 8 pipe.

Als nächstes sorgen Sie dafür, dass der Transport, wenn er genutzt wird, immer nur mit einer Mail pro Aufruf gefüttert wird. Da es dafür keine Einstellung gibt, passen Sie die Datei /etc/postfix/main.cf.local an (zur Begründung siehe erneut man 8 pipe):

kopano_destination_recipient_limit = 1

Nun sorgen Sie dafür, dass der Transport auch genutzt wird und bauen anschließend die beiden Konfigurationsdateien aus den Templates und den *.local neu:

ucr set mail/postfix/virtual/transport=kopano
ucr commit /etc/postfix/{main,master}.cf

Nun sind wir soweit und können Postfix mit der angepassten Konfiguration neu starten:

systemctl restart postfix

Und das war’s. Zum Testen empfehle ich das Tool swaks, das installiert werden kann, wenn das unsupported-Repository aktiviert ist. Dann kann man nämlich super schnell die Einlieferung testen:

swaks --from mbunkus@mbu-test.intranet --to mbunkus@mbu-test.intranet --server 127.0.0.1

Man sollte natürlich nicht verschweigen, dass die Verwendung von pipe anstelle von lmtp einen kleinen Performancenachteil hat — es wird ja für jede Mail ein neuer Prozess gestartet. Das sollte aber ausschließlich bei wirklich großen Mailservern mit sehr hoher Anzahl von Konten zum Problem werden.

Gruß
mosu


#5

Hallo mosu,

vielen Dank für den Tipp und die ausführliche Erklärung. Ich werde das in den nächsten Tagen versuchen um zu setzen… ALLERDINGS ist mir gerade folgendes aufgefallen:

Ich habe 2 weitere UCS Server mit quasi gleicher Konfiguration im Betrieb (an anderen Standorten) und da sind die X-Original-To Header drin - in jeder empfangenen Mail.
Ich habe keine Unterschiede in den Konfigurationen gefunden (main.cf, master.cf) - abgesehen von Domainnamen und IP Adressen natürlich. Ich habe beim googeln auch irgendwo überflogen, dass der amavis den Header Eintrag eventuell löschen würde. Kann es auch noch daran liegen?

Jna


#6

Huhu,

keine Ahnung, ob Amavis das macht. Vielleicht setzt ein Upstream-Mailserver diese Header bei den anderen Servern? Nutzt man z.B. ein Catchall-/Multidrop-Postfach, das man via fetchmail abholt, so setzt normalerweise der Provider, bei dem Sie das Catchall-/Multidrop-Postfach betreiben, diese Header bereits.

Gruß
mosu


#7

Hallo,

ja, dem ist so. Die beiden weiteren holen Mails per fetch ab. OK, dann liegt das daran.
Dann bleibt nur der von dir beschrieben Plan.

Vielen Dank auch hierfür !!!

Jan


#8

Moin,

ja, sorry - die Option heisst auch header_checks nicht header_access.