Communication entre Postfix et Dovecot : local delivery

Dans cette page, on détaille la communication entre Postfix, notre MTA, et Dovecot, notre MDA. Dovecot est un serveur pour Postfix. Postfix est un client pour Dovecot. Postfix est un Mail Transfer Agent, c’est-à-dire qu’il reçoit des mails et les transfère. Mais nous lui avons attribué un nom de domaine dont il est responsable, via un champ MX et la configuration de Postfix. Tous les mails dont l’adresse du destinataire est en @picasoft.net ne seront pas transmis à un autre serveur, mais enregistrés.

Plus précisément, il vont être relayés à un serveur spécial, mais pas avec le protocole SMTP. Postfix utilisera le protocole LMTP, qui est une version modifiée de SMTP, et qui est destinée à une utilisation locale. Et surtout, ce mail va être envoyé à un MDA: Dovecot.

La principale différence avec le SMTP vient du fait que le MDA sait directement si la boîte aux lettres du destinataire a suffisamment d’espace de stockage, a le droit de recevoir des mails de tel ou tel expéditeur, ce qui n’est jamais le cas d’un MTA (qui est intermédiaire).

Le protocole LMTP permet donc le refus immédiat d’un message, ce qui n’est pas le cas de SMTP, qui est plus souple et permet un refus a posteriori (plusieurs heures après, le temps que le refus se fasse, puis soit propagé dans la chaîne de transmission, en sens inverse).

Il y a d’autres différences qui sont là uniquement pour des raisons de performances, comme par exemple la non-politesse. La politesse SMTP est un ensemble de messages inutiles destinés uniquement à éliminer les crawlers. Ainsi, les serveurs SMTP “polis” se disent bonjour, donnent leur identité, la version de leur logiciel, etc.

Ces différences avec SMTP font que la Local Delivery se fait sur un port différent, et est sujette à des écarts aux standards puisqu’elle concerne seulement deux serveurs bien précis. Par exemple, lorsque Postfix et Dovecot commencent une communication, ils précisent qu’ils s’appelle Postfix version m et Dovecot version n, et une fois que c’est fait, ils se permettent de grandes largesses, en sachant pertinemment qu’il n’y aura pas de bug puisque leurs concepteurs respectifs savent comment fonctionne l’autre. Entre autres, ils peuvent vérifier si une communication UDP est disponible, et le cas échéant, changer de port pour accélérer la livraison.

C’est pour cette raison que nous avons opté pour un network docker qui place virtuellement postfix et dovecot sur le même réseau d’hôte: tous les ports de l’un sont accessibles à l’autre, ce qui permet de ne pas se soucier de la communication entre les deux. Voir la page Communication entre conteneurs MTA et MDA

  • technique/old/etudes/mail/protocoles/lmtp.txt
  • de qduchemi