J'ai 3 serveurs. 1 serveur MX avec postfix et 2 serveurs Dovecot. Le serveur MX reçoit les emails et les sert ensuite par LMTP à un serveur Dovecot spécifique. Toutes les boîtes aux lettres d'un même domaine sont sur le même serveur.
Existe-t-il un moyen de désactiver temporairement LMTP et deffer les messages pour un domaine spécifique ? Par exemple en cas de migration de domaines entre des serveurs Dovecot.
Sur postfix j'utilise transport_maps
transport_maps = mysql:/etc/postfix/sql/transport.cf
Avec cette requête
query = SELECT concat('lmtp:',servers.address, ':24') FROM servers
JOIN domains ON (domains.server_id=servers.ID)
WHERE domains.name LIKE SUBSTRING_INDEX("%s", "@", -1)
LIMIT 1;
Dovecot écoute lmtp sur le port 24, user_query dans Dovecot est
user_query = SELECT 1
FROM domains
JOIN mailboxes ON (domains.ID=mailboxes.domain_id)
WHERE
domains.name LIKE '%d'
AND mailboxes.name LIKE '%n'
AND domains.server_id='X'
LIMIT 1;
J'ai vérifié la page de manuel Dovecot user_query, mais il n'y a rien qui puisse m'aider ( http://wiki2.Dovecot.org/UserDatabase y http://wiki2.Dovecot.org/UserDatabase/ExtraFields )
J'ai essayé d'ajouter une condition à user_query. "AND domains.enable_lmtp = 1" mais ensuite le serveur postfix a transmis avec succès l'email au serveur Dovecot et le serveur Dovecot a renvoyé à l'expéditeur l'erreur "User doesn't exists".
Ensuite, j'ai essayé d'ajouter la même condition à la requête du serveur sur le serveur postfix. La requête n'a rien retourné (pas de transport), l'email a été supprimé et dans le journal, il était écrit
postfix/virtual[724]: fatal: bad string length 0 < 1: virtual_mailbox_base =
postfix/master[32263]: warning: process /usr/libexec/postfix/virtual pid 724 exit status 1
postfix postfix/master[32263]: warning: /usr/libexec/postfix/virtual: bad command startup -- throttling
J'espérais que postfix mettrait les messages en file d'attente différée, mais il ne l'a pas fait. Les messages ont été supprimés. La même chose s'est produite lorsque j'ai changé le serveur de transport pour une adresse inexistante.
Alors, est-ce que je fais quelque chose de mal ? Y a-t-il un moyen de résoudre mon problème ?
Mon postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
config_directory = /etc/postfix
content_filter = smtp-amavis:[127.0.0.1]:10024
mydestination = $myhostname, localhost.$mydomain, localhost
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname,
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, check_policy_service unix:/var/spool/postfix/postgrey/socket, check_policy_service unix:private/recipient_restrictions
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_tls_loglevel = 0
smtpd_tls_received_header = yes
smtpd_use_tls = yes
transport_maps = mysql:/etc/postfix/sql/transport.cf
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = mysql:/etc/postfix/sql/mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/sql/mailbox_maps.cf