Voici brièvement le fonctionnement du protocole SMTP. Celui est tout d’abord défini initialement par la RFC 821 puis réactualisé par la suite avec d’autres RFC (exemple RFC 2821). Ces RFC définissent entre autre :

– L’envoi des messages.
– La réception des messages.
– La structure des adresses de messagerie.
– Le format des lettres.

Cette liste n’est pas exhaustive et d’autres fonctionnalités en plus de celles-ci sont également définies. Prenons comme définition la structure des adresses de messagerie. Ces adresses doivent donc respecter un format bien particulier sous peine de rejet de l’adresse pas le serveur. Le format est donc :

utilisateur@nom-de-domaine

L’utilisateur est la partie locale qui identifie le propriétaire de l’adresse. Ensuite nous trouvons le caractère @ qui permet de séparer la partie locale au nom de domaine. Enfin vient le nom de domaine identifiant généralement l’entreprise hébergeant les boites mails (yahoo.fr, hotmail.com, gmail.com).

Le protocole SMTP fonctionne sur le port TCP 25. Une fois la connexion établie, le serveur SMTP répond par un message de bienvenue. Ainsi le serveur et le client peuvent commencer à échanger.
Le protocole SMTP à deux types de réponses :

– +OK
– -ERR

Chaque commande et réponse doivent se terminer par la séquence « CRLF » signifiant un retour chariot et un retour à la ligne.
Une transaction SMTP est divisée en trois étapes.

MAIL
La session débute par la commande MAIL indiquant l’émetteur. Le <reverse-path> contient l’adresse mail source.

Syntaxe : MAIL FROM : <reverse-path>
Réponse attendue :

+OK
-ERR

La commande indique au receveur qu’une nouvelle transaction commande et réinitialise toutes les tables et buffers ainsi que les destinataires et les données du mail. L’adresse source servira de retour en cas d’erreur. Si la commande est validée le code de retour est 250.
La <reverse-path> peut contenir plusieurs adresses cependant seulement la première peut envoyer cette commande au serveur.

RCPT
La seconde étape de la transaction est la commande RCPT.

Syntaxe : RCPT TO : <forward-path>
Réponse attendue :

+OK
-ERR

Cette commande spécifie le destinataire. En cas de validation la réponse retournée est 250 OK. Si le destinataire est inconnu le serveur de destination retourne une erreur 550. Cette étape peut être répétée plusieurs fois dans le cas ou plusieurs destinataires sont spécifiés.

DATA
La dernière étape est la commande DATA.

Syntaxe : DATA
Réponse attendue :

+OK
-ERR

Si la commande est acceptée, le serveur SMTP retourne la réponse 354 et considère que toutes les lignes suivantes font parties du message à envoyer. Une fois le texte du message complété, le serveur envoie la réponse 250 OK.
Le texte du message peut-contenir plusieurs balises facultatives telles que :
– « Date » qui contient la date du message.
– « Subject » indiquant le sujet du message.
– « To » indiquant les destinataires du message.
– « From » indiquant l’expéditeur du message.
Le message est terminé lorsqu’une ligne contenant qu’un seul point est rencontrée.

Syntaxe : <CRLF>.<CRLF>
Réponse attendue :

+OK

Cette séquence bien particulière marque la fin du message. Le serveur sait que les commandes suivantes sont relatives à la transaction et non au message.

Les réponses
Chaque commande envoyée génère une réponse particulière. Une réponse SMTP contient un code à trois chiffres suivi d’un texte quelconque. Le texte peut différer selon le serveur et la façon dont celui-ci a été implémenté. En revanche le code est bien spécifique à la commande envoyée. Ci-dessous voici une liste non exhaustive de codes :

– « 500 » Erreur de syntaxe.
– « 250 » Action effectuée.
– « 551 » Utilisateur non local.
– « 554 » Transaction échouée.
– « 354 » Début de message.

Implémentation minimale

Afin de rendre le protocole SMTP fonctionnel, les commandes suivantes sont obligatoirement requises : HELLO, MAIL, RCPT, DATA, RSET, NOOP, QUIT.
Avec ces seules commandes il est possible d’envoyer un message. Cependant il existe d’autres commandes définit dans les RFC. Celles-ci permettent de réaliser des actions supplémentaires mais sont facultatives.

Cas d’utilisation

Afin d’y voir plus clair nous allons décrire la procédure d’envoi d’un mail via un exemple concret en utilisant le serveur SMTP de SFR. Nous pouvons détailler la procédure grâce à une session telnet.

1 telnet smtp.neuf.fr 25
2 Trying 93.17.128.23…
3 Connected to smtp.mgp.neufgp.fr.
4 Escape character is ‘^]’.
5 220 msfrf2309.sfr.fr ESMTP ABO **************************
6 helo moi
7 250 msfrf2309.sfr.fr
8 mail from: <toto@hotmail.com>
9 250 2.1.0 Ok
10 501 5.5.4 Syntax: RCPT TO:<address>
11 rcpt to: <titi@hotmail>
12 501 5.1.3 Bad recipient address syntax
13 501 5.5.4 Syntax: RCPT TO:<address>
14 rcpt to: <titi@hotmail.com>
15 250 2.1.5 Ok
16 data
17 354 End data with <CR><LF>.<CR><LF>
18 Voici le message.
19 .
20 250 2.0.0 Ok: queued as 789B77000089
21 quit
22 221 2.0.0 Bye

Les lignes mises en évidence en gras sont les commandes envoyées par le client. Le reste du texte est envoyé par le serveur au client.
Avec cet exemple nous voyons que des commandes doivent être envoyées au serveur en suivant un ordre bien précis. La première commande à envoyer est « helo » ou « ehlo ». Elle permet d’initier la session SMTP. La seconde commande « mail from » indique l’e-mail de l’expéditeur. La troisième commande « rcpt tp » indique le destinataire du message. A noter que cette commande peut se répéter puisqu’il peut y avoir plusieurs destinataires. La cinquième commande « data »indique au serveur que tous ce qui suit est le message de l’e-mail. La sixième commande « . » (un point seul sur une ligne) permet de spécifier la fin du message. Enfin la commande « quit » termine la connexion SMTP.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Post Navigation