Fallstrick Mail deffered Postfix und Dovecot
Problemstellung
Bei der Konfiguration von Postfix und Dovecot kann es zu einem spezifischen Fehler kommen, wenn E-Mails an mehrere Empfänger zugestellt werden sollen. Der Fehler tritt auf, wenn Postfix die E-Mails direkt über den `smtpd`-Dienst und nicht über den `lmtp`-Dienst an Dovecot übergibt. Im Log erscheint dann folgende Fehlermeldung:
status=deferred (mail system configuration error) warning: pipe flag `D' requires dovecot_destination_recipient_limit = 1
Dieser Fehler führt dazu, dass E-Mails nicht zugestellt werden und im Status `deferred` verbleiben, was in verzögerten oder gänzlich fehlgeschlagenen Zustellungen resultiert.
Ursache des Problems
Der Fehler wird durch das Flag `D` bei der Übergabe der E-Mail an den Dovecot-Transport verursacht. Wenn mehrere Empfänger (Recipients) in einer Nachricht vorhanden sind und `dovecot_destination_recipient_limit` nicht explizit auf `1` gesetzt ist, versucht Postfix, die Nachricht an alle Empfänger gleichzeitig zu übergeben. Das ist jedoch nicht möglich, da der Dovecot-Transport nur eine Nachricht pro Übergabe verarbeitet, wenn das `D`-Flag verwendet wird.
Lösung
Um das Problem zu lösen, muss in der Postfix-Konfigurationsdatei main.cf der Eintrag:
dovecot_destination_recipient_limit = 1
gesetzt werden. Damit wird Postfix angewiesen, jede Nachricht separat an den Dovecot-Transport weiterzugeben, sodass der Fehler vermieden wird.
Alternative Lösung über LMTP
Ein alternativer Ansatz, der diesen Konfigurationsparameter überflüssig macht, ist die Verwendung des LMTP-Protokolls zur Übergabe der Nachrichten an Dovecot. LMTP (Local Mail Transfer Protocol) ist ein spezielles Protokoll für die Zustellung an lokale Mailboxen und unterstützt standardmäßig die Verarbeitung mehrerer Empfänger in einer Nachricht.
Wenn Postfix so konfiguriert wird, dass es die E-Mails über den `lmtp`-Dienst an Dovecot zustellt, entfällt die Notwendigkeit des Parameters `dovecot_destination_recipient_limit`, und das System funktioniert auch mit mehreren Empfängern reibungslos. Hierzu muss `lmtp` in der Postfix-Konfiguration als Übergabeprotokoll definiert werden.
Zusammenfassung
| Zustellungsweg | Erforderliche Einstellung | Erklärung |
|---|---|---|
| Übergabe über `smtpd` | `dovecot_destination_recipient_limit=1` | Begrenzt die Empfängeranzahl auf 1, um den `D`-Flag-Konflikt zu vermeiden |
| Übergabe über `lmtp` | Kein zusätzlicher Parameter erforderlich | LMTP unterstützt mehrere Empfänger in einer Nachricht standardmäßig, `dovecot_destination_recipient_limit` ist unnötig |
Fazit
Der Parameter `dovecot_destination_recipient_limit` ist notwendig, wenn Postfix die Mails über den Standard-SMTP-Weg an Dovecot übergibt. Durch die Verwendung von LMTP kann dieser Fallstrick jedoch umgangen werden, was für stabilere Zustellungen und eine einfachere Konfiguration sorgt.
