Exim est un agent de transfert de messages (MTA), autrement dit un logiciel qui prend en charge la distribution du courrier aussi bien en local que sur un réseau, qu’il s’agisse d’un réseau local ou de l’ensemble du net (en termes simples, c’est un serveur smtp). Il est l’un des principaux MTA sous *nix, avec Postfix et est, actuellement, le MTA par défaut de Debian et de ses dérivées, notamment d’Ubuntu.
La configuration d’exim4 sous Debian est, a priori assez simple (Page de la doc d'Ubuntu sur la configuration d'Exim, en anglais), mais on peut parfois se trouver face à une situation plus complexe, notamment lorsque l’on veut pouvoir utiliser plusieurs serveurs relais SMTP, et pire encore, lorsque l’un des utilisateurs a plusieurs adresses internet utilisant chacune un relais SMTP différent.
C’est l’objectif de ce tuto : créer une configuration d’exim (au départ conçue pour un ordinateur portable qui peut se connecter à Internet soit via un réseau personnel, soit via un réseau professionnel n’autorisant pas les connexions SMTP sortantes (n’autorisant pas grand chose, en fait), portable qui se trouve avoir deux comptes principaux, l’un celui de l’utilisateur à titre perso (suger), l’autre celui de l’utilisateur à titre professionnel (sugerpro).
- Il y a deux utilisateurs qui se loguent sur l’ordinateur
- Pour des raisons à la fois historiques et pratiques, suger a trois adresses email, chacune avec son propre SMTP
- Par ailleurs, suger est aussi le destinataire des mails envoyés à root, histoire de savoir ce qui se passe sur l’ordi
- Sugerpro, lui, n’a qu’une adresse, professionnelle, avec son SMTP
Enfin, en cas de problème avec un des smtps ci-dessus, on charge gmail de faire la distribution
L’ordinateur répond au joli nom de PortableSuger et a, entre autres un démon avahi/zeroconf qui tourne. De façon très originale, suger a appelé son réseau interne chez.moi
Editer /etc/hosts et s’assurer que l’on a une ligne
127.0.0.1 PortableSuger.chez.moi PortableSuger localhost
Editer /etc/aliases et ajouter, si elle n’y est pas, une ligne
root: suger@localhost
Sous Debian et dérivées, c’est très simple :
sudo aptitude install exim4 exim4-config
sudo dpkg-reconfigure exim4-config
Et répondre aux questions :
Envoi via un relais ("smarthost") - réception SMTP ou fetchmail
Nom de courriel du système : PortableSuger.chez.moi
Liste d'Ips ou exim attend des connexions SMTP entrantes : 127.0.0.1
Addresses pour lesquelles cette machine est la destination finale : PortableSuger;portablesuger.local
Machine à relayer : laisser vide
Nom réseau ou IP du système smarthost : smtp.gmail.com::587 (soit le smtp de secours)
Cacher le nom local dans les courriers sortants : non
Minimiser les requêtes DNS : non
Méthode de distribution du courrier local : personnellement, j'utilise /var/spool/mail
Séparer la configuration dans plusieurs fichiers ? : oui
Bien, maintenant, on va créer un fichier /etc/exim4/smarthostlist dans lequel on va mettre, adresse par adresse, le smarthost à utiliser
suger@p2pfr.com: smtp.gmail.com::587 suger@free.fr: smtp.free.fr suger@orange.fr: smtp.orange.fr suger@boulot.fr: smtp.boulot.fr
Pour permettre l’authentification pour gmail, on édite le fichier /etc/exim4/password.client et on y ajoute
gmail-smtp.l.google.com:suger@p2pfr.com:monmdp *.google.com:suger@p2pfr.com:monmdp smtp.gmail.com:suger@p2pfr.com:monmdp
Il y a deux choses à faire :
Autoriser les utilisateurs à modifier leur en-tête de messagerie (le champ From). Sauf déclaration spécifique, en effet, exim remplace systématiquement celui-ci soit par le nom d’utilisateur (suger@localhost), soit par une adresse indiquée, utilisateur par utilisateur, dans /etc/exim4/email-addresses. Or, ici, suger veut pouvoir utiliser plusieurs adresses.
On crée donc un fichier
/etc/exim4/conf.d/main/00_localmacros (le 00_ au début du nom du fichier est important), dans lequel on met
.ifndef MAIN_TRUSTED_USERS MAIN_TRUSTED_USERS = uucp:suger .endif
Ensuite, il faut expliquer à exim qu’il faut choisir le smtp en fonction de l’adresse de l’expéditeur. C’est le rôle du fichier
/etc/exim4/conf.d/router/00_localmacros
où l’on met
smart_smarthost: driver = manualroute domains = ! +local_domains route_data = ${lookup{$sender_address}lsearch{/etc/exim4/smarthostroutelist}} no_verify host_find_failed = defer same_domain_copy_routing = yes transport = remote_smtp_smarthost
Reconfigurer et relancer exim
sudo update-exim4.conf sudo /etc/init.d/exim4 restart
Et voilà. Il n’y a plus qu’à être sur que son logiciel de messagerie mette bien l’adresse from en tête de l’enveloppe. Sous gnus, ça se fait en rajoutant deux lignes dans ~/.gnus
(setq message-sendmail-f-is-evil nil) (setq message-sendmail-envelope-from 'header)
Supposons, pour le plaisir de compliquer, que l’on veuille, en plus, pour certains destinataires particuliers, utiliser un smtp donné, par exemple parce que leur domaine n’accepte que certains smtp. Il faut, dans ce cas, modifier ainsi /etc/exim4/conf.d/router/00_localhost
special_routers: driver = manualroute domains = domaine.special;autre.domaine;encore.un.domaine route_list = mon.smtp.special no_verify host_find_failed = defer same_domain_copy_routing = yes transport = remote_smtp_smarthost
smart_smarthost: driver = manualroute domains = ! +local_domains route_data = ${lookup{$sender_address}lsearch{/etc/exim4/smarthostroutelist}} no_verify host_find_failed = defer same_domain_copy_routing = yes transport = remote_smtp_smarthost