Postfix : domaine virtuel en transport smtp et non virtual

Bonjour,

j’ai installé un serveur mail postfix/mysql sur un serveur debian squeeze stable 64bit (kimsufi d’ovh).

Mon problème est que quand j’envoie un mail vers tata@example.com (j’ai remplacé mon vrai domaine par example.com), syslog me dit (voir surtout en gras):

Pourtant ma configuration postfix a l’air propre :

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
smtpd_use_tls=no

myhostname = ns.example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = ns.example.com, localhost.example.com, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_alias_maps.cf

Pour mysql, tout a l’air bon :

[guest@localhost~]$ postmap -q "tata@example.com" mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf
[guest@localhost~]$ example.com
[guest@localhost~]

[guest@localhost~]$ postmap -q "tata@example.com" mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf
[guest@localhost~]$ tata@example.com
[guest@localhost~]

Et pour la zone dns pour les mails :

[guest@localhost~]$ dig mx example.com +short
[guest@localhost~]$ 10 mail.example.com
[guest@localhost~]

Donc pourquoi mon domaine virtuel example.com ne fonctionne pas :think: ?

Merci d’avance pour vos réponses, cordialement.

ReBonjour,

je crois que je suis maudit par mysql, ou alors je suis parano en disant que c’est un bug de postfix :119 .

Après avoir révisé longuement quelques pages de la doc de postfix, je sais pourquoi postfix ne peut pas livrer de messsage vers un domaine virtuel (example.com) : c’est parce qu’il utilise le transport smtp au lieu de virtual, c’est à dire que je devrais avoir

Sep 10 15:39:34 ns postfix/virtual[23727]: 7D387833C1: to=<tata@example.com>, relay=none, delay=0.11, 

au lieu de

Sep 10 15:39:34 ns postfix/smtp[23727]: 7D387833C1: to=<tata@example.com>, relay=none, delay=0.11, 

En effet, d’après postfix.traduc.org/index.php/pos … _transport, postfix utilise le transport smtp lorsqu’il doit livrer des messages vers des domaines ne faisant pas partie de $mydestination, $virtual_alias_domains, et de $virtual_mailbox_domains.
Or mon domaine virtuel example.com fait partie de $virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf, et donc devrait utiliser le transport virtual et non smtp.
Mais alors pourquoi mon postfix a fait l’erreur d’utiliser smtp pour ce domaine virtuel ?
Est-ce que c’est un bug de postfix ? J’apprécierais votre retour si vous pouvez faire un test

Pourtant dans mon main.cf, vitual_transport (qui permet à postfix d’utiliser le transport virtual pour les domaines virtuels listés dans $virtual_mailbox_domains) est bien virtual

Par ailleurs, je dis que je suis maudit par mysql, parce que mon domaine virtuel utilise bien le transport virtual de postfix quand j’utilise la méthode des fichiers hash au lieu de la méthode mysql, càd comme ceci :

virtual_mailbox_domains = example.com (au lieu de mysql:/etc/postfix/mysql-virtual_mailbox_domains.cf)
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox (au lieu de mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf)
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual (au lieu de mysql:/etc/postfix/mysql-virtual_alias_maps.cf)

Donc avec tous ces éléments là, ma question est la suivante : pourquoi quand j’utilise la méthode mysql et non la méthode hash dans main.cf, postfix utilise le transport smtp au lieu du transport virtual pour mon domaine virtuel ?

Merci d’avance :pray:

Rebonjour,

j’ai résolu le problème, mais je n’ai pas compris le pourquoi de la solution.

Mon erreur était dans le fichier mysql-virtual_mailbox_domains.cf où il fallait utiliser le %s au lieu du %d :

Mon erreur :
query = SELECT domain FROM virtual_mailbox_domains WHERE domain = '%d'

Correction :
query = SELECT domain FROM virtual_mailbox_domains WHERE domain = '%s'

Dans ma tête %d correspond au domaine se trouvant à droite de l’arobase @ d’une adresse mail,
et %s correspond à user+@+domaine (adresse email entière).

En plus dans ma table virtual_mailbox_domains, la colonne domaine ne contient que des domaines, et pas des adresses emails, donc je ne vois pas pourquoi utiliser ‘%s’ au lieu de ‘%d’.

Est-ce que quelque peut m’expliquer pourquoi il fallait mettre %s au lieu de %d ?
Merci d’avance.

La doc de Postfix en français.
postfix.traduc.org/

Sinon pour ton problème spécifique la réponse est là je pense
postfix.org/pgsql_table.5.html

[quote]query The SQL query template used to search the database,
where %s is a substitute for the address Postfix is
trying to resolve, e.g.
query = SELECT replacement FROM aliases WHERE mailbox = ‘%s’

          This  parameter  supports  the following '%' expan-
          sions:

[…]
%s This is replaced by the input key. SQL
quoting is used to make sure that the input
key does not add unexpected metacharacters.
[…]
%d When the input key is an address of the form
user@domain, %d is replaced by the SQL
quoted domain part of the address. Other-
wise, the query is suppressed and returns no
results.
[/quote]
Si je ne me trompe pas le “%s” ne fait qu’un remplacement, alors que “%d” n’est utilisé qu’avec les adresse mail complète (avec @) et ne retourne que la partie domaine, comme tu le pensais. Mais dans les autres cas ça ne renvoi rien, donc il était normal que ta requête ne fonctionnais pas.

Voilà :smiley: