Da heute Fenstertag vor dem ersten Mai war, war entsprechend wenig los in der Arbeit. Einige Supportmails von Kunden waren zu beantworten, aber war locker managebar.
Ich habe endlich mal angefangen die Exim-Dokumentation zu lesen. Zwar nur ein Kapitel aber immerhin. Kapitel 3 ist wohl für’s Grundverständnis eines der wichtigsten, da hier das Grundkonzept von routers und transports erklärt wird, die Basis der Mailzustellung in Exim.
A router is a driver that operates on an address, either determining how its delivery should happen, by assigning it to a specific transport, or converting the address into one or more new addresses (for example, via an alias file). A router may also explicitly choose to fail an address, causing it to be bounced.
A transport is a driver that transmits a copy of the message from Exim’s spool to some destination. There are two kinds of transport: for a local transport, the destination is a file or a pipe on the local host, whereas for a remote transport the destination is some other host. A message is passed to a specific transport as a result of successful routing. If a message has several recipients, it may be passed to a number of different transports.
Router sind zuständig, anhand vom Empfänger (und einigen anderen möglichen Faktoren) herauszufinden, wo ein Mail hingehört. Sprich, wo es hingeroutet werden soll. Ob es lokal zugestellt werden soll oder an einen anderen Mailserver weitergeschickt werden soll.
Transports übernehmen dann die tatsächliche Aufgabe des Zustellens. Ein transport für lokale Zustellung beispielweise schreibt ein File in die Mailbox des lokalen Users. Ein remote-smtp transport versucht ein Mail per SMTP an einen weiteren Mailserver zu senden. So einfach.
Während ein Mail eintrifft werden die routers abgearbeitet, da man ja im Normalfall mehrere hat. Der erste router beispielsweise, erkennt anhand der Domain, ob das Mail für einen lokalen User bestimmt ist. Wenn nicht, macht er eine DNS-Abfrage nach dem MX der Empfänger Domain und übergibt das Mail an den remote_smtp transport. Sollte es keinen MX-Record geben, wird das Mail als fail abgelegt und generiert im nächten Queue-Run ein Bouncemail.
Der zweite router kommt zum Zug, wenn das Mail (bzw die Empfänger-Adresse) als lokal befunden wird, sprich der Mailserver selbst die Domain verwaltet. Dieser Router sollte derjenige sein, der Aliases und Weiterleitungen überprüft (beispielsweise durch die ~/.forward). Wenn hierdurch neue Empfängeradressen generiert werden, gehen diese auch nochmal alle Router der von Anfang an durch. Ansonsten wird die Adresse declined, sprich sie geht an den nächsten router weiter.
Der letzte router wäre dann derjenige, der das lokale Mail „zustellen“ lässt. Sprich er prüft, ob der local_part der Adresse ein lokaler user (oder virtueller, je nach Konfiguration) ist und gibt das Mail an den entsprechenden transport zur Zustellung weiter.
Soviel zum ersten (eigentlich dritten) Kapitel, jetzt könnt ich mal mit Kompilieren anfangen. Naja, vielleicht morgen. Jetzt geht’s erstmal ins Bett. Ich habe wieder eine Menge Megatokyo gelesen heute. Wirklich supter Comic. Leider bin ich schon wieder über die Hälfte, es wird bald zu Ende sein… und dann wieder ein Jahr warten ^^
gn8
So, what do you think ?