exim: Smarthost anhand der Absenderadresse auswählen

Ich möchte von meinen Systemen aus je nach der Absender-Adresse unterschiedliche Smarthosts ansteuern. Sprich: Wenn ich im MUA als vwegert@web.de schreibe, soll die Mail zur Auslieferung an smtp.web.de übergeben werden, wenn ich als Absender meine Manitu-Adresse verwende, soll der dortige Smarthost verwendet werden und so weiter. Exim kann das mit ein wenig Bastelei.

Erstmal lege ich mir eine Datei namens /etc/exim/smarthosts an, in der ich die "Routing-Regeln" definiere. Die Datei sieht so aus:

vwegert@web.de:     smarthost=smtp.web.de             auth_name=vwegert auth_pass=ganzgeheim
*@volker-wegert.de: smarthost=smtp.volker-wegert.de   auth_name=vwegert auth_pass=nochgeheimer

Der Inhalt sollte eigentlich selbsterklärend sein. Wie man sieht, ist die Angabe von Wildcards in der Empfängeradresse mglich. Da diese Datei sensitive Daten enthält, ist eine entsprechend restriktive Berechtigungsvergabe angebracht. Dann kommt die exim.conf dran. Aus der Router-Konfiguration wird der domain_literal-Router auskommentiert (wenn das noch nicht passiert ist) und durch folgenden Eintrag ersetzt:

smarthost_auto:
   condition = ${extract{smarthost}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}
   driver = manualroute
   domains = ! +local_domains
   route_list = "* ${extract{smarthost}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}"
   transport = remote_smtp

Achtung: Die Reihenfolge der Router ist wichtig!

Das liest sich am besten als "Wenn in der Datei /etc/exim/smarthosts eine Zeile gefunden werden kann, deren Schlüssel als Wildcard auf die Absenderadresse passt und in der ein Smarthost eingetragen ist, dann lege manuell als nächsten MTA auf der Route ebendiesen Smarthost fest und gib die Nachricht per SMTP weiter."
Das reicht mir ganz knapp noch nicht, denn schließlich will ich mich auf der Gegenseite ja auch noch mit Passwort melden. Dazu muß in den Transport remote_smtp noch die Zeile

  hosts_try_auth = smtp.volker-wegert.de:smtp.web.de

eingebaut werden. Außerdem gehört folgende Konfiguration in die authenticators-Sektion:

cram_md5:
     driver = cram_md5
     public_name = CRAM-MD5
     client_name = "${extract{auth_name}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}"
     client_secret = "${extract{auth_pass}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}"

Und das sollte es eigentlich auch schon gewesen sein...

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer