Il y a quelques problèmes à ce niveau. Le plus important est que le $
à la fin de l'expression rationnelle n'est pas échappé, exim pense donc qu'il s'agit du début d'une variable. L'expression ne peut donc pas être développée.
Le plus gros problème est que la dnsdb
lookup effectue une simple requête DNS, et c'est tout. Donner une regexp dans la recherche n'a pas de sens, puisque de cette façon, la requête serait ambiguë. Dans votre cas, la recherche est quelque chose comme "donnez-moi une adresse MX, je ne me soucie pas de laquelle", et cela ne fonctionne manifestement pas. Même si vous échappez le $
exim ne développe même pas l'expression rationnelle donnée, mais tente de rechercher l'enregistrement MX pour l'hôte nommé ^.*$
.
Le routage basé sur l'enregistrement MX peut être effectué de cette manière :
non_mydom_mx:
driver = manualroute
condition = ${if match {${lookup dnsdb{>: mxh=$domain}}}{[^:]\d\.mydom\.net}{yes}{no} }
transport = non_mydom
route_list = * 192.168.0.11
Ici, vous demandez le nom d'hôte MX pour le domaine du destinataire. Puisqu'un domaine a tendance à avoir plus d'enregistrements MX, la recherche concatène les résultats, séparés par des caractères :
(ceci est spécifié par l'option >:
au début de la valeur de recherche). La valeur donnée par le dnsdb
est utilisée dans un match
qui compare le résultat à une expression rationnelle (qui prend en compte les éléments suivants :
comme début d'une nouvelle ligne). Si le résultat correspond, la condition se traduit par un yes
sinon, a no
Dans ce cas, le routeur décline.
Il convient de mentionner qu'exim dispose d'une excellente sortie de débogage, donc si vous êtes bloqué, lancez simplement exim en mode débogage comme ceci :
exim4 -d+all -bd -oX 25252 2>&1|tee exim-debuglog.txt
Ensuite, la connexion au port donné ( 25252
) et en essayant d'envoyer un simple message, exim écrira toutes les informations relatives au traitement du message, y compris les ACL, les routeurs et les étapes d'expansion des variables. Cela peut s'avérer utile si vous essayez de comprendre pourquoi une certaine règle ne fonctionne pas.