Le SMTP spoolé

Notez cet article

Même si la plupart d’entre nous possède désormais une connexion permanente à Internet comme l’ADSL ou le câble, il existe encore des situations où l’on utilise des connexions intermittentes comme le RNIS, l’ISDN ou le RTC: liens de secours, lieux non-couverts par l’ADSL, etc.

Celui qui utilise une connexion intermittente se retrouve généralement face à la problématique suivante: Comme la connexion n’est pas permanente, il n’est à priori pas possible d’avoir son propre serveur SMTP gérant la réception du courrier en provenance de l’Internet. On doit alors laisser la gestion de tout le courrier électronique au FAI (Fournisseur d’Accès Internet), ce qui est somme toute dommage, surtout si l’on dispose d’un service informatique capable de gérer les services Internet.

Il est toutefois possible de contourner ce problème grâce aux extensions du protocole SMTP, défini par le ESMTP (Extended Simple Mail Protocol).

L’idée est la suivante:
– le courrier arrive sur le serveur SMTP du FAI,
– le FAI stocke le courrier dans une file d’attente,
– le client récupère toute la file d’attente lorsqu’il se connecte.

Attention, ici il n’est nullement question d’accéder à des boites aux lettres via POP mais bien de récupérer toute la file d’attente SMTP d’un domaine sans se soucier d’éventuelles erreurs de destinataires. Ces mêmes erreurs seront gérées par la suite par le serveur SMTP de destination; le FAI n’a qu’un rôle d’intermédiaire: il est serveur-relais, tout simplement.

Le mécanisme de récupération de la file d’attente SMTP se fait via la commande ETRN; c’est cette même commande qui sera étudiée plus tard et un petit programme en C illustrera son utilisation.

Voici la trame d’un message transitant depuis l’émetteur du message jusqu’au destinataire final, au-delà de la connexion intermittente:

Le client envoie son message vers son serveur de courrier via une transaction SMTP. Ce même serveur extrait le MX (Mail Exchanger) de son DNS et l’expédie via une autre requête SMTP sur le serveur relais. Ce dernier se contente de stocker le message dans la file d’attente; à ce stade, il n’y a plus aucune notion de délai de livraison: c’est le client lui même qui va récupérer le courrier quand bon lui semble. Lorsque la connexion intermittente monte, le serveur SMTP de destination exécute la commande ETRN et toute la file d’attente est récupérée. Le destinataire du message n’a plus qu’à récupérer son courrier via POP.

Une commande ETRN consiste en fait à accéder au port 25 d’un serveur SMTP, et à envoyer cette même commande. Le serveur SMTP tente alors d’accéder au port 25 de l’émetteur de la transaction et déclenche un dialogue SMTP entre les deux serveurs.
Le dialogue suivant vous montre comment se passe une transaction ETRN:
telnet mx.mondomaine.fr 25
220 mx.mondomaine.fr ESMTP Sendmail 8.10.0/8.10.0;
ehlo mx.tondomaine.fr
250-mx.mondomaine.fr Hello mx.tondomaine.fr [192.168.0.1] (may be forged),
etrn @tondomaine.fr
250 2.0.0 Queuing for node @tondomaine.fr started
quit
221 2.0.0 mx.mondomaine.fr closing connection

La commande « etrn @mx.tondomaine.fr » déclenche la transaction SMTP entre les deux serveurs. Il y a deux façons d’utiliser la commande ETRN:
soit par domaine (@tondomaine.fr), soit par file d’attente (#file), cela dépend du fournisseur et de sa façon de procéder.
Attention, la commande ETRN ne fonctionne qu’avec des serveurs ESMTP, d’où le « ehlo » qui est là pour tester la nature du serveur.

Dans la plupart des cas, le serveur utilisé est un Sendmail 8.10 ou plus doté d’une mailertable pour rediriger le courrier grâce à un mailer particulier appelé DSMTP.
Ci-dessous, un exemple de configuration pour sendmail:
Sendmail.mc
divert(-1)
dnl
dnl Configuration sendmail côté FAI
dnl
divert(0)
include(`/usr/lib/sendmail-cf/m4/cf.m4′)
VERSIONID(`Sendmail pour mx0.d0.com’)dnl
OSTYPE(`linux’)dnl
define(`confMAX_MESSAGE_SIZE’, `5000000′)dnl
define(`STATUS_FILE’, `/etc/mail/sendmail.st’)dnl
define(`confDOMAIN_NAME’, `mx0.d0.com’)dnl
define(`ALIAS_FILE’, `/etc/mail/aliases’)dnl
define(`confTO_QUEUEWARN’, `72h’)dnl
define(`confTO_QUEUERETURN’, `7d’)dnl
FEATURE(`access_db’,`hash -o /etc/mail/access’)dnl
FEATURE(`mailertable’,`hash -o /etc/mail/mailertable’)dnl
FEATURE(always_add_domain)dnl
MAILER(smtp)dnl

Mailertable
d1.com dmstp:[mail.d0.com]
d2.com dmstp:[mail.d0.com]
d3.com dmstp:[mail.d0.com]
d4.com dmstp:[mail.d0.com]

Sendmail.mc
divert(-1)
dnl
dnl Configuration sendmail sur une ligne RNIS/ISDN
dnl
divert(0)
include(`/usr/lib/sendmail-cf/m4/cf.m4′)
VERSIONID(`Sendmail pour mail.d0.com’)dnl
OSTYPE(`linux’)dnl
define(`confMAX_MESSAGE_SIZE’, `5000000′)dnl
define(`STATUS_FILE’, `/etc/mail/sendmail.st’)dnl
define(`confDOMAIN_NAME’, `mail.d0.com’)dnl
define(`SMART_HOST’,`esmtp:[mx0.d0.com]’)dnl
define(`confCON_EXPENSIVE’, `true’)dnl
define(`ALIAS_FILE’, `/etc/mail/aliases’)dnl
define(`confTO_QUEUEWARN’, `72h’)dnl
define(`confTO_QUEUERETURN’, `7d’)dnl
MODIFY_MAILER_FLAGS(`SMTP’,`+e’)dnl
FEATURE(`access_db’,`hash -o /etc/mail/access’)dnl
FEATURE(`virtusertable’,`hash -o /etc/mail/virtusertable’)dnl
FEATURE(always_add_domain)dnl
FEATURE(local_procmail)dnl
FEATURE(use_cw_file)dnl
MAILER(smtp)dnl

Pour lancer l’ETRN, placez ce petit programme dans votre crontab sur la machine au delà de la connexion intermittente.

Laisser un commentaire