Présentation SMTP    Enregistrer au format PDF


par Sphix

Le Simple Mail Transfer Protocol (littéralement « Protocole simple de transfert de courrier »), généralement abrégé SMTP, est un protocole de communication utilisé pour transférer le courrier électronique vers les boîtes de messagerie d’Internet.

SMTP est un protocole assez simple (comme son nom l’indique). On commence par spécifier le ou les destinataires d’un message puis, l’expéditeur du message, puis, en général après avoir vérifié leur existence, le corps du message est transféré. Il est assez facile de tester un serveur SMTP en utilisant telnet sur le port 25.

Le SMTP a commencé à être largement utilisé au début des années 1980. Il était alors un complément à l’UUCP, celui-ci étant plus adapté pour le transfert d’e-mails entre des machines dont l’interconnexion est intermittente. Le SMTP, de son côté, fonctionne mieux lorsque les machines qui envoient et reçoivent les messages sont interconnectées en permanence.

Le logiciel Sendmail fut l’un des premiers, sinon le premier, Mail Transfer Agent (MTA), logiciel de transfert de courrier, à utiliser SMTP. Depuis, la plupart des logiciels de courriel clients peuvent utiliser SMTP pour envoyer les messages. Certains nouveaux serveurs sont apparus, comme Postfix, Qmail de Daniel J. Bernstein, Exim et Exchange de Microsoft (qui accomplit également d’autres fonctions).

Comme le protocole utilisait du texte en ASCII (7 bits), il ne fonctionnait pas pour l’envoi de n’importe quels octets dans des fichiers binaires. Pour pallier ce problème, des standards comme MIME ont été développés pour permettre le codage des fichiers binaires au travers de SMTP. Aujourd’hui, la plupart des serveurs SMTP acceptent le MIME sur 8 bits, ce qui permet de transférer des fichiers binaires presque aussi facilement que du texte simple.

SMTP ne permet pas de récupérer à distance des courriels arrivés dans une boîte aux lettres sur un serveur. Les standards POP et IMAP ont été créés dans ce but.

Une des limitations de SMTP était qu’il n’y avait pas de moyen d’identifier l’expéditeur. Pour ceci, l’extension SMTP-AUTH a été définie.


Le protocole SMTP

Le protocole SMTP (Simple Mail Transfer Protocol, traduisez Protocole Simple de Transfert de Courrier) est le protocole standard permettant de transférer le courrier d’un serveur à un autre en connexion point à point.

Il s’agit d’un protocole fonctionnant en mode connecté, encapsulé dans une trame TCP/IP. Le courrier est remis directement au serveur de courrier du destinataire. Le protocole SMTP fonctionne grâce à des commandes textuelles envoyées au serveur SMTP (par défaut sur le port 25). Chacune des commandes envoyées par le client (validée par la chaîne de caractères ASCII CR/LF, équivalent à un appui sur la touche entrée) est suivi d’une réponse du serveur SMTP composée d’un numéro et d’un message descriptif.

Voici un scénario de demande d’envoi de mail à un serveur SMTP

Lors de l’ouverture de la session SMTP, la première commande à envoyer est la commande HELO suivie d’un espace (noté ) et du nom de domaine de votre machine (afin de dire "bonjour je suis telle machine"), puis valider par entrée (noté ). Depuis avril 2001, les spécifications du protocole SMTP, définies dans le RFC 2821, imposent que la commande HELO soit remplacée par la commande EHLO.

La seconde commande est "MAIL FROM :" suivie de l’adresse email de l’expéditeur. Si la commande est acceptée le serveur renvoie le message "250 OK"

La commande suivante est "RCPT TO :" suivie de l’adresse email du destinataire. Si la commande est acceptée le serveur renvoie le message "250 OK"

La commande DATA est la troisième étape de l’envoi. Elle annonce le début du corps du message. Si la commande est acceptée le serveur renvoie un message intermédiaire numéroté 354 indiquant que l’envoi du corps du mail peut commencer et considère l’ensemble des lignes suivantes jusqu’à la fin du message repéré par une ligne contenant uniquement un point. Le corps du mail contient éventuellement certains des en-têtes suivants :

Date
Subject
Cc
Bcc
From
<code>
     Si la commande est acceptée le serveur renvoie le message "250 OK"

Voici un exemple de transaction entre un client (C) et un serveur SMTP (S)

<code>
S: 220 smtp.securityhack.org SMTP Ready

C: EHLO machine1.securityhack.org

S: 250 smtp.securityhack.org

C: MAIL FROM:<webmaster@securityhack.org>

S: 250 OK

C: RCPT TO:<tutu@tutu.net>

S: 250 OK

C: RCPT TO:<momo@momo.fr>

S: 550 No such user here

C: DATA

S: 354 Start mail input; end with <CRLF>.<CRLF>

C: Subject: Petit Bonjour

C: Salut gouz,

C: comment ca va?

C:

C: Bye !

C: <CRLF>.<CRLF>

S: 250 OK

C: QUIT

R: 221 smtp.securityhack.org closing transmission

Les spécifications de base du protocole SMTP veulent que tous les caractères transmis soient codés en code ASCII sur 7 bits et que le 8ème bit soit explicitement mis à zéro. Ainsi pour envoyer des caractères accentués il faut faire recours à des algorithmes intégrant les spécifications MIME :

base64 pour les fichiers attachés
quoted-printable (d’abbréviation QP) pour les caractères spéciaux contenus dans le corps du message

Il est ainsi possible d’envoyer un courrier grâce à un simple telnet sur le port 25 du serveur SMTP :

telnet smtp.securityhack.org 25

(le serveur indiqué ci-dessus est volontairement inexistant, vous pouvez essayer en remplaçant commentcamarche.net par le domaine de votre fournisseur d’accès à internet)

Voici un récapitulatif des principales commandes SMTP

Commande

Description


HELO
(désormais EHLO) EHLO 193.56.XX.XXX Identification à l’aide de l’adresse IP ou du nom de domaine de l’ordinateur expéditeur


MAIL FROM :
MAIL FROM : expediteur@domaine.com Identification de l’adresse de l’expéditeur

RCPT TO : RCPT TO : destinataire@domaine.com Identification de l’adresse du destinataire


DATA
DATA message Corps du mail

QUIT QUIT Sortie du serveur SMTP


HELP
HELP Liste des commandes SMTP supportées par le serveur

L’ensemble des spécifications du protocole SMTP sont définies dans le RFC 821 (depuis avril 2001, les spécifications du protocole SMTP sont définies dans le RFC 2821).

Documentations publiées dans cette rubrique