2. Grundsätzliches zur Konfiguration
sendmail wird durch einige Textdateien, die bei den anfangs erwähnten FreeBSD-Versionen im Verzeichnis /etc/mail untergebracht sind, konfiguriert. Eine zentrale Rolle kommt dabei den Dateien sendmail.cf und submit.cf zu, darin sind die wesentlichen Bestandteile der Konfiguration untergebracht. Durch die sendmail.cf wird der Mail Transfer Agent (MTA) konfiguriert, während die submit.cf für die Konfiguration des Mail Submission Program (MSP) zuständig ist.
Nachdem eine E-Mail mit einem Mail User Agent, wie z.B. mutt, pine oder Evolution erstellt worden ist, wird sie zunächst dem MSP übergeben, der die E-Mail wiederum dem lokalen MTA übermittelt. Dieser entscheidet dann je nach Empfänger, ob die E-Mail sofort lokal zugestellt werden kann, oder aber an den SMTP-Relayserver des E-Mailanbieters oder ISPs zur Auslieferung über das Internet weitergereicht werden muss. Für die Zustellung einer E-Mail auf dem lokalen Rechner ist der Mail Delivery Agent (MDA) zuständig, er übernimmt die E-Mails vom MTA und legt sie in den lokalen Mailboxen der Benutzer ab. Näheres zum Konzept des MSP, der mit der sendmail-Version 8.12 neu eingeführt wurde, finden sich unter FreeBSD z.B. in der Datei /etc/mail/README.
Die rohen Konfigurationsdateien sind sehr kryptisch und daher schwer zu lesen und zu bearbeiten. Aus diesem Grund wird im Allgemeinen der m4-Makro-Prozessor dazu benutzt, diese Dateien zu erzeugen. Die Datei, die entsprechende Anweisungen zur Erzeugung der sendmail.cf enthält wird unter FreeBSD normalerweise einmal nach dem Namen des Rechners benannt und bekommt die Endung .mc, für das Beispielsszenario wäre das host.example.mc. Eine neue submit.cf für das MSP muss für die hier vorgestellte Konfiguration nicht erstellt werden.
Eine solche Datei zum Erzeugen der sendmail.cf enthält zum einen Kommentare und zum anderen Makros, die von m4 in die Ausgabedatei eingesetzt werden. Sämtlicher Text, der sich zwischen der m4-Anweisung dnl und dem nächsten Zeilenumbruch befindet, erscheint nicht in der Ausgabedatei, während Kommentare, die mit # beginnen, übernommen werden. Dabei müssen allerdings alle darin vorkommende Schlüsselwörter mit ` und ' umschlossen werden, um zu verhindern, dass sie von m4 ersetzt werden. Besser ist es solche Kommentare zwischen den m4-Anweisungen divert(-1) und divert(0) einzuschließen, die m4 dazu veranlassen den dazwischen liegenden Text nicht in die Ausgabe zu übernehmen. Wenn den m4-Makros Argumente übergeben werden, z.B. bei der define()-Anweisung sollten diese ebenfalls von ` und ' umschlossen werden, um u.a. ein unbeabsichtigtes Ersetzen zu vermeiden.
In der cf/README wird bei der Angabe der verschiedenen Makros diese Reihenfolge empfohlen:
- VERSIONID
- OSTYPE
- DOMAIN
- FEATURE
- lokale Makrodefinitionen
- MAILER
- LOCAL_RULE_*
- LOCAL_RULESETS