[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Problem mit exim.conf, der port-Option (remote_smtp) und flexibler Wertzuweisung



Am Donnerstag, den 08.06.2006, 15:28 +0200 schrieb Christian Schmidt:

[..]
> @Daniel: Ich muss gestehen, dass ich Deine Schilderung nicht ganz
> verstanden habe. Koenntest Du nochmal...?

Ich schicke aber voraus, dass es sich offenbar um eine Exim-Beschränkung
handelt. Nach nochmaligem Lesen der Doku und diversen Versuchen verstehe
ich diese jetzt so, dass Exim (und zwar unabhängig(!) ob 3.x oder 4.x)
nur schaut, ob der Ausdruck mit einer Zahl beginnt. Ist das der Fall,
wird der Wert direkt als Port ausgewertet. Ist das erste Zeichen keine
Zahl ruft Exim getservbyname() auf. Da der Ausdruck nicht mit einer Zahl
beginnt, ist das offenbar der Fall. Und da der Ausdruck somit offenbar
gar nicht erst ausgewertet wird, kann ich meine Idee wohl in den Wind
schießen. Wenn es dennoch interessiert, geht es hier weiter.

Was ich habe: Die Datei /etc/exim/passwd.client enthält für alle Konten
die zugehörigen Mailserver, Logins und Passwörter:

meineadresse1@domain.tld:lokaleruser1:mail.domain1.tld:meinlogin1:meinpasswort1

Wird eine Mail verschickt, schaut Exim in dieser Datei nach den
notwendigen Daten, um sich am Zielserver zu authentifizieren. Dabei
werden alle Mail-Server auf dem Port 25 (bzw. getservbyname(smtp), wenn
ich die Doku richtig verstehe und der Standardwert 'port = smtp' ist)
kontaktiert.

Was ich möchte: Ich möchte nun aber (netzbedingt), dass diverse
Mailserver auf dem Port 587 kontaktiert werden. Daher möchte ich der
passwd.client noch den Port übergeben, auf dem der empfangende
Mailserver horcht (25/587):

meineadresse1@domain.tld:lokaleruser1:mail.domain1.tld:25:meinlogin1:meinpasswort1
meineadresse2@domain.tld:lokaleruser2:mail.domain2.tld:587:meinlogin2:meinpasswort2

Dazu habe ich den Transporter 'remote_smtp' um die 'port'-Option
erweitert. Wähle ich einen Ausdruck, bei dem der Port aus der
passwd.client ausgelesen wird:

remote_smtp:
  debug_print = "T: remote_smtp for ${extract{3}{:}{${lookup{$sender_address}lsearch{/etc/exim/passwd.client}{$value}fail}}}"
  driver = smtp
  port = "${extract{3}{:}{${lookup{$sender_address}lsearch{/etc/exim/passwd.client}{$value}fail}}}"
  authenticate_hosts = mail.gmx.net:mail.domain.tld:postman.arcor.de

bekomme ich von Exim nur die Fehlermeldung:

TCP service "${extract{3}{:}{${lookup{$sender_address}lsearch{/etc/exim/passwd.client}{$value}fail}}}" not found

Das Debug-Statement (debug_print) zeigt aber (z.B.): "T: remote_smtp for
587". Also die gelesenen Daten sind richtig. Nur die 'port'-Option will
den Ausdruck nicht auswerten. 

Fazit: Bleibt mir wohl nur, den Transporter bzw. den Port via Bedingung
zu wählen/definieren. Es sei denn, jemand hat eine bessere Idee.

MfG Daniel



Reply to: