|  | FAQ: | Welche Wege nimmt eine Mail durch das Modulsystem eines Postfix-Servers? | 
Postfix glänzt als Mail Transfer Agent System durch seinen modularen Aufbau. Dieser macht
      Postfix flexibel, leicht zu konfigurieren und zu warten - und außerdem fördert diese
      Architektur die Entwicklung von fehlerfreien, schnellen und sicherem Code. Wenn ein Postfix-Server
      eine Mail empfängt, dann kümmern sich spezielle Module jeweils um die verschiedenen Aspekte
      des Empfangs, der Verarbeitung und der Zustellung von Mails. 
      
      Klicken Sie auf die einzelnen Teile der Grafik, um zu den betreffenden Erläuterungen zu gelangen:
 
    
    Die Queues, die Sie in diesem Schaubild sehen, bestehen technisch aus Unterverzeichnissen des konfigurierten Warteschlangenverzeichnisses von Postfix (main.cf-Parameter $queue_directory, default: /var/spool/postfix)
Dieser hat evtl. diverse Beschränkungen und entscheidet daraufhin, ob er die Verbindung zulässt
      oder ablehnt. Wird die Verbindung zugelassen, so übergibt smtpd die empfangenen Mails an das
      Cleanup Modul. 
      
      Benutzer und Prozesse des lokalen Rechners können die Befehle sendmail oder postdrop verwenden,
      um eine Mail abzuschicken. Diese Mail muss als Datei in RFC
      2822-konformem Format vorliegen. Postfix stellt eine eigene Version des Befehls sendmail
      zur Verfügung, damit andere Programme funktionieren, die von einem installierten Sendmail-Server
      ausgehen. Verwechseln sie nicht das Utility mit dem Namen „sendmail“ mit dem althergebrachten
      Mailserver-System Sendmail! 
      
      Das von Postfix installierte sendmail arbeitet nämlich mit genau denselben Optionen wie das
      alte herkömmliche sendmail, so dass andere Prozesse den Unterschied nicht bemerken. Wie auch
      immer, postdrop bzw. sendmail legen die Mail schließlich als Datei in der maildrop Warteschlange
      ab – dies ist auch möglich, wenn Postfix gar nicht aktiv ist: Diese Warteschlange wird
      automatisch beim Start von Postfix und auch danach regelmäßig abgearbeitet. Hierfür
      ist der Prozess pickup zuständig. Er holt die Mails aus der Maildrop-Warteschlange und übergibt
      Sie dem Cleanup Modul.
      Der Prozess cleanup übernimmt also Mails sowohl von pickup als auch von smtpd. Für all
      diese Mails werden nun bestimmte Checks durchgeführt. Es wird z.B. dafür gesorgt, dass
      im Header der einzelnen Mail evtl. fehlende Pflicht-Attribute eingetragen werden und dass bei Bedarf
      die Adressierung in ein standardisiertes Format der Schreibweise 
      „user@domain.com“ umgewandelt wird (diese Aufgabe wird dem Modul trivial-rewrite übertragen). 
      
      Auch die komplette Umadressierung von Mails kann durch cleanup erledigt werden. Darüber hinaus
      kann cleanup die Mails noch einigen (jedoch nicht sehr mächtigen) Filtern unterwerfen 
      – als Schutz vor Spam. 
      
      Sowohl diverse Zugriffsregeln beim smtpd-Prozess als auch bei cleanup können dazu führen,
      dass Mails in aus dem normalen Mail-Fluss herausgenommen und der so genannten hold-Warteschlange
      platziert werden. Dort bleiben sie solange liegen, bis z.B. der Administrator nach einer Sichtung
      dieser Mails deren Weiterverarbeitung veranlasst. 
      
      Normalerweise jedoch legt cleanup schließlich die derart behandelte Mails als Dateien in
      der incoming Warteschlange ab und benachrichtigt den Queue Manager.
In der active Warteschlange werden z.B. Mails gruppiert, die gemäß ihren Empfänger-Adressen
      den gleichen Weg im Mailfluss nehmen (z.B. zum gleichen Smarthost gesendet werden). Außerdem
      werden die Mails abermals an das Modul trivial-rewrite übergeben, damit der weitere Transport-Weg
      ermittelt werden kann. Der trivial-rewrite-Prozess gleicht dabei die Umschlagsempfänger der
      Mails gemäß 
      einer Tabelle ab, ob evtl. ein spezieller Transportweg eingeschlagen werden muß (z.B. an
      einen ganz bestimmten SMTP-Server). 
      
      Außerdem kann trivial-rewrite anhand einer speziellen Tabelle den Absender der Mail von einem
      Postfach-Umzug unterrichten. 
      
      Somit wird entgültig festgelegt, wie und wohin die Mails zugestellt werden müssen. Diesen
      Auftrag übergibt qmgr dann an die entsprechenden Zustellungsmodule – 
      die Delivery Agents. 
      
      Stellt sich heraus, dass aus temporären Gründen nicht zugestellt werden konnte (z.B.
      weil der kontaktierte SMTP-Server nicht erreichbar war), dann lagert qmgr die betreffenden Mails
      in der deferred Queue ab – noch einiger Zeit beginnt ein erneuter Versuch – die Mails
      kommen abermals in die active Queue. Ist eine Mail dauerhaft nicht zustellbar, dann wird Sie dem
      bounce-Prozess übergeben – dieser erzeugt eine Nichtzustellbarkeitsmeldung an den Absender.
Dazu fragt smtp die für die Zieladresse der Mail zuständigen MX-Einträge im DNS
      ab. Falls dort mehrere Ziel-Server aufgeführt werden, wird diese Liste nach Priorität
      sortiert und die Server werden gegebenenfalls nacheinander kontaktiert. 
      
      Das Modul virtual liefert Mail in lokale Mailboxen aus, wobei UNIX-typische Mailboxen (alle Mails
      werden in einer einzigen Datei gespeichert) und auch Mailboxen vom QMail-Standard (jede Mail wird
      in einer eigenen Datei gespeichert) beliefert werden können. Im Unterschied zum local Agent
      kann virtual Mailboxen mit unterschiedlichen Mail-Domains beliefern, so dass er sich für Konstellationen
      eignet, in denen ein Postfix-System viele verschiedene Mail-Domains beherbergt. 
      
      Das Modul local wird ebenfalls zur Auslieferung von Mails in lokale Mailboxen benutzt. Es kann
      zwar nicht gut mit verschiedenen Mail-Domains umgehen, aber beherrscht neben „UNIX-style“ 
      und „QMail-style“ Mailboxen auch die Zustellung an Postfächer in Sendmail-Format,
      bei Bedarf auch mit den dort gebräuchlichen forward-Files. Außerdem kann local die Mail
      zur Auslieferung an einen zusätzlichen Programmaufruf übergeben, was in der Praxis häufig
      genutzt wird, und zwar mit dem Pogramm procmail. Das Modul lmtp stellt Mails über das Local
      Mail Transfer Protocol (LMTP) an einen entsprechenden Server auf dem gleichen Rechner zu. Es handelt
      sich dabei um eine Übergabeschnittstelle für Mails, die dem SMTP-Protokoll sehr ähnlich
      ist und z.B. im Zusammenspiel mit Cyrus-Mailservern (POP3 und IMAP4) wichtig sein kann. 
      
      Das Modul pipe übergibt die Mail an einen externen Programmaufruf, der dann die Mail zu speziellem
      Handling übernehmen kann. Es kann sich dabei um alles mögliche handeln, z.B. ein Programm
      zum Viren-Check der Mail, oder einen Anti-Spam-Filter. Außerdem wurde pipe im Zusammenhang
      mit Übermittlung in UUCP-Mailsysteme (Unix to Unix Copy Program) benutzt, was heutzutage jedoch
      keine große Rolle mehr spielen dürfte.
 
  
  
    
    



