Sans le protocole réseau standard de l’Internet moderne, l’envoi de documents, de cartes électroniques ou de vidéos etc. ne serait tout simplement pas du tout possible. En effet, lorsque vous envoyez un email, ce dernier ne va pas directement au destinataire mais traverse un processus de communication complexe avec de nombreuses instances avant qu’il ne l’atteigne.
Qu’est-ce que le protocole SMTP ?
SMTP est l’abréviation de « Simple Mail Transfer Protocol », ce qui peut se traduire en français par « protocole simple de transfert de courrier ». Il s’agit d’un protocole réseau texte orienté connexion de la famille des protocoles Internet et à ce titre situé sur la septième couche du modèle OSI. Comme tout autre protocole réseau, il contient des règles pour une communication correcte entre les ordinateurs d’un réseau. SMTP est spécifiquement responsable de l’envoi et de la transmission des emails d’un expéditeur à un destinataire.
Depuis sa sortie en 1982 en tant que successeur du « Mail Box Protocol » dans Arpanet, SMTP est devenu le protocole standard pour l’envoi d’emails. Pour l’internaute lambda, cependant, la procédure du SMTP reste largement invisible, puisqu’elle est exécutée en arrière-plan par le programme de messagerie correspondant. Ce n’est que si le logiciel, l’application Webmail dans le navigateur ou encore l’application de messagerie mobile ne définit pas le protocole SMTP par lui-même lors de la création d’un compte, qu’il doit alors être configuré manuellement pour assurer un trafic email fluide.
Sendmail a été l’un des premiers Mail Transfer Agents (MTA) à supporter le protocole SMTP.
Voici un aperçu des adresses de serveur SMTP et des ports SMTP pour certains des fournisseurs de messagerie :
Fournisseur de messagerie | Adresse serveur SMTP | Port SMTP |
---|---|---|
Yahoo | smtp.mail.yahoo.com | 587 |
GMX | mail.gmx.net | 587 |
Free | smtp.free.fr | 587 |
Gmail | smtp.gmail.com | 587 (TLS/STARTTLS), 465 (SSL) |
Comment fonctionne le processus SMTP ?
Comprendre le processus du protocole SMTP signifie également comprendre le fonctionnement d’un email. Le processus se déroule en principe comme suit :
- Le client SMTP, c’est à dire l’expéditeur, télécharge l’email sur le serveur SMTP, c’est à dire le serveur d’email sortant du fournisseur de messagerie correspondant. Ceci s’effectue via une application Webmail dans le navigateur ou un programme de messagerie (techniquement un « Mail User Agent » abrégé en MUA), comme Windows Live Mail ou bien Mozilla Thunderbird.
- Le serveur SMTP contacte alors le serveur DNS, qui recherche l’adresse IP du serveur SMTP cible (également appelé « Mail Delivery Agent », MDA en abrégé), qui est stockée pour l’adresse du destinataire du message.
- Le serveur SMTP envoie l’email via un ou plusieurs « Mail Transfer Agents » (MTA) au serveur SMTP cible. Chacune de ces opérations de transfert est effectuée selon le protocole SMTP.
- Le serveur SMTP de destination (cible) stocke temporairement l’email dans le stockage temporaire d’email.
- Le destinataire MUA télécharge l’email via IMAP ou POP3.
Comment fonctionne une session SMTP ?
L’interaction entre le client SMTP et le serveur SMTP mentionnée dans la première étape de la procédure SMTP représente la session SMTP réelle. Le reste de la procédure SMTP, c’est-à-dire le transfert de l’email via SMTP du serveur vers le destinataire, est traité dans un article séparé. Chaque session se compose d’une séquence de commandes SMTP provenant du client et de réponses sous forme de codes d’état provenant du serveur.
Vue d’ensemble des commandes SMTP
Selon les spécifications SMTP applicables, chaque implémentation du protocole réseau doit prendre en charge au moins les huit commandes suivantes constituées de caractères ASCII 7 bits :
Commande SMTP | Signification |
---|---|
HELO | « Hello » – Le client se connecte avec son nom d’ordinateur et démarre la session avec. |
MAIL FROM | Le client nomme l’expéditeur de l’email. |
RCPT TO | « Recipient » – Le client nomme le destinataire de l’email. |
DATA | Le client initie la transmission de l’email. |
RSET | Le client interrompt la transmission initiée, mais maintient la connexion entre le client et le serveur. |
VRFY/EXPN | « Verify »/ « Expand » – Le client vérifie si une messagerie est disponible pour la transmission du message. |
NOOP | Le client demande une réponse du serveur pour éviter une déconnexion due à un délai d’attente. |
QUIT | Le client termine la session. |
Vue d’ensemble des codes d‘état du serveur
Le serveur répond à chacune de ces commandes SMTP du client par un code de statut ou d’état à trois chiffres comprenant un message en texte clair. Pour une meilleure compréhension, nous avons traduit ces messages en français dans le tableau suivant :
Code de statut | Message texte (traduction en français) |
---|---|
Codes de statut qui indiquent que le serveur a exécuté la commande avec succès : | |
200 | (nonstandard success response) |
211 | Demande de statut système ou d’aide système |
214 | Demande d’aide pour l’exécution d’une commande |
220 | Le serveur est prêt pour la session SMTP. |
221 | Le serveur met fin à la connexion |
250 | OK – Commande exécutée |
251 | OK – Aucun utilisateur local disponible, l’email est redirigé |
252 | OK – L’adresse du destinataire ne peut pas être vérifiée, la transmission est toujours en tentative. |
253 | OK – Les messages sont paramétrés sur « en attente » |
Codes de statut qui indiquent que le serveur a compris la commande, mais qu’il a besoin d’informations supplémentaires pour la traiter : | |
354 | Le serveur démarre la réception de l’email |
Codes de statut qui indiquent que le serveur a détecté une erreur temporaire, mais que la commande peut encore être exécutée : | |
421 | Serveur non disponible, la connexion est terminée |
450 | Commande non exécutée, messagerie non disponible |
451 | Exécution de la commande interrompue en raison d’une erreur locale |
452 | Commande non exécutée, car il n’y a pas assez de mémoire système. |
Codes de statut qui indiquent que le serveur a détecté une erreur fatale et que la commande ne peut pas être exécutée : | |
500 | Erreur de syntaxe, commande inconnue |
501 | Erreur de syntaxe dans les paramètres ou arguments |
502 | La commande n‘existe pas |
503 | Séquence de commandes invalide |
504 | Le paramètre de commande n’existe pas |
521 | Le serveur n’accepte pas les emails |
530 | Accès refusé |
550 | Commande non exécutée, messagerie non disponible |
551 | Aucun utilisateur local n’est disponible, essayez une redirection |
552 | Exécution interrompue, erreur d’allocation de mémoire |
553 | Commande non exécutée, nom de messagerie invalide |
554 | Échec de la transmission |
Exemple de session SMTP
Une session SMTP entre client et serveur peut, par exemple, s’exécuter comme suit :
Partie | Commandes SMTP et codes de statut | Signification |
---|---|---|
Serveur: | 220 smtp.exemple.com ESMTP Postfix | Une fois la connexion établie, le serveur SMTP se connecte |
Client: | HELO relay.exemple.com | Le client SMTP se connecte avec son nom d’hôte. |
Serveur: | 250 smtp.exemple.com, Bonjour | Le serveur confirme la connexion |
Client: | MAIL FROM:<Monsieur@Untel.com> | Le client spécifie l’adresse de l’expéditeur du MUA. |
Serveur: | 250 OK | Le serveur valide |
Client: | RCPT TO:<chef@bureau.com> | Le client spécifie l’adresse du destinataire. |
Serveur: | 250 OK | Le serveur valide |
Client: | DATA | Le client initie la transmission de l‘email |
Serveur: | 354 End data with <CR><LF>.<CR><LF> | Le serveur démarre la réception et spécifie que le texte de l’email doit être terminé par un («.») |
Client: | From: „Monsieur Untel“ <Monsieur@Untel.com>To: Chef bureau <chef@bureau.com>Date: Montag, 12. März 2018 10:03:42Objet : arrêt maladieBonjour,Je suis malheureusement en arrêt maladie. Je vais envoyer par fax aux Ressources Humaines le certificat médical ainsi que l’arrêt de travail du médecin.Meilleures salutations,Monsieur Untel. | Le client parcourt le texte de l’email, le surligne avec un saut de ligne après « Objet : arrêt maladie » et le termine avec le point demandé |
Serveur: | 250 OK: queued as 15432 | Le serveur confirme la réception de l’email et l’ajoute à la file d’attente. |
Client: | QUIT | Le client signale la fin de la session |
Serveur: | 221 Au revoir | Le serveur met fin à la connexion |
Quels sont les inconvénients du protocole SMTP ?
SMTP présente deux inconvénients inhérents au protocole réseau. La première est que l’envoi d’un email via SMTP ne renvoie pas de confirmation d’expédition consultable. Bien que les spécifications du protocole prévoient une telle notification, son formatage n’est pas défini par défaut, de sorte que seul un message d’erreur en anglais incluant l’en-tête du message non délivré est généralement renvoyé. Il est donc difficile de déterminer la cause de l’échec de la transmission (par exemple une mauvaise adresse ou une messagerie saturée du côté du destinataire).
Le deuxième inconvénient du SMTP est que les utilisateurs ne sont pas authentifiés lorsqu’une connexion est établie et que l’expéditeur d’un email n’est donc pas fiable. Par conséquent, les relais SMTP ouverts sont souvent mal utilisés pour l’envoi massif de spam. Les expéditeurs utilisent de fausses adresses d’expéditeurs arbitraires afin qu’il soit alors impossible de les tracer (Mail Spoofing). Aujourd’hui, de nombreuses techniques de sécurité sont utilisées pour prévenir l’utilisation abusive des serveurs SMTP. Par exemple, les emails suspects sont rejetés ou placés en quarantaine (le dossier spam). Le protocole d’identification DomainKeys, le Sender Policy Framework (SPF) ou le Greylisting en sont responsables. En outre, il est devenu plus ou moins courant de recevoir des emails non seulement par le port traditionnel 25/TCP, mais aussi par le port 587/TCP afin de permettre la transmission exclusivement aux utilisateurs authentifiés.
Qu’est-ce que ESMTP ?
En réponse au problème répandu du spam sur Internet, une extension du SMTP a été lancée en 1995 : Extended SMTP (ESMTP en abrégé). Il complète le protocole avec d’autres commandes en code ASCII 8 bits, ce qui a permis de nombreuses nouvelles fonctions pour économiser de la bande passante et protéger les serveurs. Il s’agit par exemple de :
- L’authentification de l’expéditeur
- Le cryptage SSL des emails
- La possibilité de joindre des fichiers multimédias aux emails
- La restriction de la taille des emails selon les paramètres par défaut du serveur
- L’envoi simultané à plusieurs destinataires
- Messages d’erreur standardisés en cas d’impossibilité de distribution
Enfin, voici quelques exemples de commandes ESMTP :
Commande ESMTP | Signification |
---|---|
EHLO | C‘est le remplaçant de « Hello.» dans l’extension du protocole. Le client se connecte avec son nom d’ordinateur et démarre avec la session. Si le serveur prend en charge ESMTP, la session démarre avec succès. Dans le cas contraire, le client doit se rabattre sur SMTP. |
8BITMIME | Le client invite le serveur à autoriser le jeu de caractères ASCII 8 bits dans le corps du message. |
SIZE | Le client invite le serveur à spécifier la taille maximale autorisée de l’email en octets. |
STARTTLS | Le client demande si le serveur prend en charge le cryptage TLS. |