Mail Address Extension / Instant Aliases mit Microsoft Exchange

Bekannterweise unterstützt Microsoft Exchange (auch bis zur Version 2019) keine Address Extensions oder Instant Aliases oder wie auch immer man sie nennen möge.

Wer es gar nicht kennt, kurze Erklärung:

Benutzer A kann seine E-Mail Adresse individuell erweitern, in dem er den Alias durch das im Mailserver definierte Trennzeichen (bspw. unter Postfix “recipient_delimiter”) und ein selbstdefinierten String übergibt.
Adresse: benutzer.a@domain.tld
zusätzliche Adresse: benutzer.a+besonderswichtig@domain.tld

Damit lassen sich nach Bedarf unterschiedliche Adressen erzeugen, die bei unterschiedlichen Portalen, Anwendungen, Shops, usw. verwendet werden können. Macht die Identifizierung bei Missbrauch leichter und vereinfacht das automatische Filtern/Sortieren im Posteingang.
Alle größeren Linux Mailserver kennen dieses Feature. Wenn auch unter unterschiedlichen Namen. Microsoft Exchange leider nicht. :-(

Workaround am Beispiel mit Postfix als Relay

Man stelle vor den Exchange eine (oder mehrere ;-)) Postfix Instanz(en) die alle Mails an den Exchange relayen. An der Stelle sollte man schon darauf achten, dass Postfix nur die Mails annimmt, deren Empfänger tatsächlich am Exchange existieren.

Ob man das nun mit lokalen Dateien

recipient_delimiter = +
relay_domains = hash:/etc/postfix/relay_domains
relay_recipient_maps = hash:/etc/postfix/relay_aliases
relay_domains
domain.tld OK
relay_aliases
benutzer.a@domain.tld OK

macht oder aufwendigere Datenbank/Directory Anbindungen baut ist egal. Je nach Wunsch und Anforderungen.
Ich persönlich mag die lokalen Textdateien. Ausfallsicher, keine akuten Abhängigkeiten und lassen sich einfach per Script befüllen.

Handling der Alias-Adressen im Postfix

Bisher

  • Mail kommt am Postfix an
  • ggfls. werden Spamprüfungen durchgeführt
  • Postfix schlägt nach, wohin er die Mail relayen soll und kippt sie dort ab
  • der Exchange Server bekommt sie für die Adresse benutzer.a+besonderswichtig@domain.tld zugestellt, kennt sie nicht und bounced.
  • (man könnte man Exchange Benutzer die Adresse manuell hinzufügen, dann würde er sie annehmen und dem Postfach zustellen, aber das widerspricht dem Grundgedanken der Extensions)

Workaround

Wir lassen Postfix die ursprüngliche Adresse mit Extension auf die korrekte Adresse am Exchange mappen.
Dazu bedienen wir uns der Postfix Option “smtp_generic_maps

smtp_generic_maps = hash:/etc/postfix/generic_maps

Und schreiben in die generic_maps welche Adresse auf welche Adresse gemappt werden soll:

generic_maps
benutzer.a@domain.tld benutzer.a@domain.tld

Sieht merkwürdig und sinnfrei aus, aber beim Relaying im Postfix passiert folgendes:

  • Postfix prüft die smtp_generic_maps bei ausgehenden Mails (also Mails vom Postfix zum Exchange) ob Änderungen an Adressen notwendig sind
  • Dabei prüft er die Adresse gegen die generic_maps nach folgendem Suchmuster
    • benutzer.a+besonderswichtig@domain.tld
    • benutzer.a@domain.tld
    • domain.tld
  • Der erste Treffer wird verwendet. Im Beispiel also benutzer.a@domain.tld. Diese wird umgeschrieben auf die gleiche Adresse. Somit wird der Postfix die Mail für benutzer.a+besonderswichtig@domain.tld an benutzer.a@domain.tld am Exchange zustellen. Die Mail-Header bleiben unberührt und man kann am Exchange wunderbar mit Filtern die Adresse weiterverarbeiten.

Cool, oder? :-D