Exim : "Message is frozen" et "unrouteable address"

, par Julien Falconnet

Les gestionnaires de courriers systèmes ou Mail Transfert Agent (MTA) sont sans doute ce que j’ai rencontré de plus compliqué en administration linux. Loin de dominer le sujet, je prie généralement pour que mon Exim fasse ce qu’il a à faire sans rencontrer de problème. Mais mes prières ne sont pas toujours exaucées. Récit d’une galère.

Sur ma dedibox debian favorite (un serveur dédié en somme) tourne un de mes plus jolis sites. Ce site de jeu de rôle en ligne nécessite une inscription qui est confirmée par email. Or depuis plusieurs jours, les mails ne voulaient plus partir.

La cause de cette panne n’aura jamais pu être complètement élucidée mais j’ai finalement réussi à remettre mes mails en place, et au passage j’ai appris un certain nombre de choses intéressantes.

Le problème

Tout d’abord les symptômes :

  1. les mails ne partent plus
  2. après quelques recherches je découvre que :
    1. le répertoire /var/spool/exim4/input est rempli de mails en attente
    2. le fichier /var/log/exim4/mainlog se remplit de lignes du type
      2007-12-17 07:10:36 1J49BU-0004SI-IJ <= truc@mondomaine.com U=www-data P=local S=630 id=1197871836.site@mondomaine.com
      2007-12-17 07:10:36 1J49BU-0004SI-IJ ** utilisateur@wanadoo.fr: Unrouteable address
      2007-12-17 07:10:36 1J49BU-0004SK-OJ <= <> R=1J49BU-0004SI-IJ U=Debian-exim P=local S=1436
      2007-12-17 07:10:36 1J49BU-0004SI-IJ Completed
      2007-12-17 07:10:36 1J49BU-0004SK-OJ ** truc@mondomaine.com: Unrouteable address
      2007-12-17 07:10:36 1J49BU-0004SK-OJ Frozen (delivery error message)
      2007-12-17 07:29:15 Start queue run: pid=17137
      2007-12-17 07:29:15 1J404B-0003uu-Vo Message is frozen
      2007-12-17 07:29:15 1J3wWb-0003je-Q6 Message is frozen

Conclusion : les mails ne veulent pas partir, ils restent résolument sur ma machine.

La recherche

Après de nombreuses heures passées sur les forums et dans la documentation un peu difficile d’exim, je finis par comprendre quelques secrets :
 Tout d’abord, /usr/sbin/exim4 -d -bt mail permet d’en savoir un peu plus sur le niveau où cela bloque, puisque cela montre en détail toutes les tentatives pour traiter l’adressage de l’e-mail. Pour moi cela donnait quelque chose du genre :

Exim version 4.63 uid=0 gid=0 pid=3588 D=fbb95cfd
Berkeley DB: Sleepycat Software: Berkeley DB 4.3.29: (September  6, 2005)
Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages
Lookups: lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dsearch nis nis0 passwd
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
changed uid/gid: forcing real = effective
   uid=0 gid=0 pid=3588
   auxiliary group list: <none>
seeking password data for user "uucp": cache not available
getpwnam() succeeded uid=10 gid=10
configuration file is /var/lib/exim4/config.autogenerated
log selectors = 00000ffc 00189001
trusted user
admin user
seeking password data for user "mail": cache not available
getpwnam() succeeded uid=8 gid=8
user name "root" extracted from gecos field "root"
originator: uid=0 gid=0 login=root name=root
sender address = root@domaine.com
Address testing: uid=0 gid=102 euid=0 egid=102
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Testing mailtest@domaine.com
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Considering mailtest@domaine.com
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing mailtest@domaine.com
--------> hubbed_hosts router <--------
local_part=mailtest domain=domaine.com
checking domains
expansion of "${if exists{/etc/exim4/hubbed_hosts}{partial-lsearch;/etc/exim4/hubbed_hosts}fail}" forced failure: assume not in this list
hubbed_hosts router skipped: domains mismatch
--------> real_local router <--------
local_part=mailtest domain=domaine.com
real_local router skipped: prefix mismatch
--------> system_aliases router <--------
local_part=mailtest domain=domaine.com
checking domains
domaine.com in "MAIN_LOCAL_DOMAINS"? no (end of list)
domaine.com in "+local_domains"? no (end of list)
system_aliases router skipped: domains mismatch
--------> userforward router <--------
local_part=mailtest domain=domaine.com
checking domains
cached no match for +local_domains
cached lookup data = NULL
domaine.com in "+local_domains"? no (end of list)
userforward router skipped: domains mismatch
--------> procmail router <--------
local_part=mailtest domain=domaine.com
checking domains
cached no match for +local_domains
cached lookup data = NULL
domaine.com in "+local_domains"? no (end of list)
procmail router skipped: domains mismatch
--------> maildrop router <--------
local_part=mailtest domain=domaine.com
checking domains
cached no match for +local_domains
cached lookup data = NULL
domaine.com in "+local_domains"? no (end of list)
maildrop router skipped: domains mismatch
--------> lowuid_aliases router <--------
local_part=mailtest domain=domaine.com
checking domains
cached no match for +local_domains
cached lookup data = NULL
domaine.com in "+local_domains"? no (end of list)
lowuid_aliases router skipped: domains mismatch
--------> local_user router <--------
local_part=mailtest domain=domaine.com
checking domains
cached no match for +local_domains
cached lookup data = NULL
domaine.com in "+local_domains"? no (end of list)
local_user router skipped: domains mismatch
--------> mail4root router <--------
local_part=mailtest domain=domaine.com
checking domains
cached no match for +local_domains
cached lookup data = NULL
domaine.com in "+local_domains"? no (end of list)
mail4root router skipped: domains mismatch
no more routers
mailtest@domaine.com is undeliverable:
   Unrouteable address
search_tidyup called
 >>>>>>>>>>>>>>>> Exim pid=3588 terminating with rc=2 >>>>>>>>>>>>>>>>

Bilan : aucun des routers ne parvient à router l’adresse.

Là je dois avouer que j’ai bloqué un bon moment. En effet, n’ayant fait aucune modification sur mon serveur, il m’a fallut un moment avant de chercher dans les fichiers de configuration ce que je pouvais y changer.

Une solution

Après de nombreuses recherches dans les fichiers de configuration et sur Internet, il semblerait que mon Exim ne tente jamais d’envoyer les mails vers l’extérieur. Finalement, sous les conseils avisés de commentaires trouvés dans un fichier de conf (dans /etc/exim4/ ) je lance une reconfiguration générale d’exim :

dpkg-reconfigure exim4-config.

Là je fais bien attention à choisir une connexion directe sur Internet, et après quelques tests, j’ai le plaisir de découvrir que mes mails fonctionnent à nouveau.

Pour finir

Après tout cela, il reste encore à relancer l’expédition de tous ces messages "frozen". Ca va être essentiellement des retours à l’expéditeur mais ça videra la queue et ça sera plus carré. Pour cela la formule miracle c’est :

exim -qff (pour relancer tous les message de la queue y compris les frozens)