# Exim

Exim est un serveur de messagerie électronique (ou Mail Transfer Agent en anglais) utilisé sur de nombreux systèmes de type UNIX. La première version a été écrite en 1995 par Philip Hazel pour le service informatique de l'Université de Cambridge : le nom signifiait alors EXperimental Internet Mailer (gestionnaire de mail internet expérimental). Basé au départ sur smail, il a largement évolué pour devenir l'un des MTA les plus flexibles et robustes.

## Historique

Exim, comme Smail, suit le modèle selon lequel a été conçu Sendmail, où un programme unique contrôle toutes les fonctionnalités du MTA. Cette conception monolithique est généralement considérée comme structurellement non sécurisée à cause du manque de séparation des composants individuels du système.
Exim est hautement configurable : il possède des fonctionnalités manquantes dans les autres serveurs de courriel. Il a toujours eu des fonctions substantielles de gestion de la politique de flux des courriers, permettant à l'administrateur de décider qui envoie ou fait passer du courriel à travers le système. Dans la version 4.x, ceci est devenu plus mature avec un système basé sur des ACL (Access Control Lists ; en français : liste de contrôle d'accès) qui autorise un contrôle très pointu et flexible. L'intégration d'un cadre pour le filtrage du contenu, apparu dans les versions 4.x, autorise l'intégration plus facile de mesures anti-spam et anti-virus, ce qui rend Exim adapté au respect de diverses politiques de messagerie électronique.
En 1997, Philip Hazel remplace la bibliothèque des expressions rationnelles POSIX écrite par Henry Spencer, par une nouvelle bibliothèque, écrite par lui-même, et appelée PCRE (Perl Compatible Regular Expression : expressions régulières compatibles avec le langage Perl). Les expressions régulières de Perl sont beaucoup plus puissantes que celles de POSIX et autres dérivés, et la PCRE est devenue populaire dans d'autres applications que Exim – dont son concurrent Postfix.

## Configuration

La configuration est faite via plusieurs fichiers de configuration, qui doivent inclure une section principale avec des réglages généraux, ainsi que des sections optionnelles :
* Access Control List (ACL), qui définit le comportement durant la session SMTP ;
* router, qui inclut certains éléments de traitement des adresses (la logique de livraison) ;
* transport, qui inclut les éléments qui envoient les messages vers la destination ;
* retry, qui définit la politique de renvoi des messages qui n'ont pas pu être envoyés du premier coup ;
* rewrite, définit si, et le cas échéant comment, le système de messagerie électronique réécrit les adresses des messages qu'il reçoit ;
* authentification, avec les réglages du SMTP AUTH.

## Performances

Exim a été déployé dans des environnements très chargés, traitant efficacement plusieurs milliers de messages à l'heure. Il a été conçu pour délivrer les messages tout de suite, sans les mettre en file d'attente. Cependant, les performances de sa gestion de la file d'attente sont relativement mauvaises quand celle-ci devient grande, ce qui arrive régulièrement sur des sites à haut débit. À l'inverse de qmail, postfix et zmailer, Exim n'a pas de gestion de file centralisée (un équivalent de qmail-send, qmgr, ou de l'ordonnanceur des autres programmes). Il n'y a donc pas de gestion de load balancing centralisée, ni de la file d'attente (ce qui mène à des temps de gestion du même message démesurés) ni de la concurrence des transports de mail (ce qui mène à un problème dit thundering herd, quand de multiples messages destinés à un même serveur sont envoyés en même temps). D'après Philippe Hazel :
   « Le fond du problème est que Exim ne se comporte pas particulièrement bien dans des environnements où la file d'attente devient très longue. Il n'a jamais été conçu pour ça, et les envois de mail à partir de la file d'attente ont toujours été censés être l'exception plutôt que la norme. »

## Portage

Exim est un logiciel libre distribué sous les termes de la licence GNU GPL, il a été porté sur plusieurs systèmes Unix, ainsi que sur Microsoft Windows en utilisant la couche d'émulation cygwin. C'est le MTA par défaut de Debian GNU/Linux.