Telnet - Envoyer un mail en ligne de commande

CréationNicolas THOREZ 2020/03/10 16:48

Même s'il s'agit d'une ancienne technologie, telnet reste un standard dans la communication avec une machine et notamment avec les serveurs SMTP.

Pour envoyer un mail directement en ligne de commande :

  • On se connecte au serveur de messagerie (indiqué ici par smtp.shyrka.sys) en spécifiant le port utilisé (ici, on utilisera le port par défaut soit 25).

# Commande
telnet smtp.shyrka.sys 25
# Réponse
Trying a.b.c.d...
Connected to smtp.shyrka.sys.
Escape character is '^]'.
220 smtp.shyrka.sys ESMTP

  • Ici, le retour ESMTP précise que le serveur accepte le mode étendu du SMTP.
  • On se présente auprès du serveur SMTP. Les anciens serveurs (ou les moins complexes) répondent via la commande HELO alors que les plus récent (ou ceux qui supporte le mode étendu) répondent via la commande EHLO. On fera suivre la commande par le nom du serveur de messagerie du client (ici, on utilisera serveur.domaine.tld) :

# Commande
EHLO serveur.domaine.tld
# Réponse
250-serveur.domaine.tld Hello  [e.f.g.h]
250-SIZE 26214400
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS

  • Le serveur répond en annonçant ces caractéristiques :
    • SIZE : Indique la taille maximale des mails en octet (soit 25Mo dans cette exemple).
    • PIPELINING : Indique que le serveur accepte des entrée en provenance du pipeline.
    • AUTH PLAIN LOGIN : Indique la nécessité de s'authentifier pour utiliser les services.
    • STARTTLS : Indique que le serveur utilise STARTTLS comme modèle de séécurité.
    • Il existe bien d'autres caractéristiques qui varie selon les serveurs de messagerie.

Authentification

L'étape d'authentification n'est nécessaire que si le serveur en fait la demande. Dans le cas contraire, on peut directement passer à la séquence de rédaction du mail.
  • Vu que le serveur exige une authentification, on utilise la commande AUTH LOGIN pour s'authentifier :

# Commande
AUTH LOGIN
# Réponse
334 VXNlcm5hbWU6

  • La réponse du serveur est tout simplement Username: en Base64. Il s'agit de l'utilisateur autorisé à se connecter. La réponse doit elle aussi être donnée en Base64 d'où le lien vers le site de chiffrement :

# Commande
TW9uIGxvZ2lu
# Réponse
334 UGFzc3dvcmQ6

  • Là, la réponse est Password: en Base64. On rentre donc le mot de passe, lui aussi en Base64 :

# Commande
UEBzc3cwcmQ=
# Réponse
235 Authentication succeeded

  • Le serveur nous a clairement identifié. On va pouvoir envoyer un mail en ligne de commande.

Corps de message

C'est ici que commence la rédaction du mail.
  • On commence par indiquer l'expéditeur. Il doit s'agir d'une adresse mail du serveur de messagerie client :

# Commande
MAIL FROM: test@domaine.tld
# Réponse
250 ok

  • On indique après le destinataire. Là, c'est une adresse du serveur de messagerie sur lequel on est connecté :

# Commande
RCPT TO: test@shyrka.sys
# Réponse
250 ok

  • Ensuite, on entre dans la partie données du mail :

# Commande
DATA
# Réponse
354 go ahead

  • Là, on peut écrire notre message en texte brut (on oublie le HTML à ce niveau). On peut précéder le message par la balise Reply-to: pour indiquer l'adresse de réponse et/ou Subject: pour indiquer le sujet du mail. Comme la touche Entrée renvoie à la ligne, on termine le mail et on active son traitement en entrant un ., seul la dernière ligne :

# Commande
Reply-to: fulltest@domaine.tld
Subject: Message de test
Ceci est un message de test.
Voilà un exemple de retour à la ligne.
.
# Réponse
250 ok

  • Il ne nous reste plus qu'à quitter telnet :

# Commande
QUIT
# Réponse
221 serveur.domaine.tld
Connection closed by foreign host

Au final, la communication telnet ressemble à ça :

telnet smtp.shyrka.sys 25
Trying a.b.c.d...
Connected to smtp.shyrka.sys.
Escape character is '^]'.
220 smtp.shyrka.sys ESMTP
EHLO serveur.domaine.tld
250-serveur.domaine.tld Hello  [e.f.g.h]
250-SIZE 26214400
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS
AUTH LOGIN
334 VXNlcm5hbWU6
TW9uIGxvZ2lu
334 UGFzc3dvcmQ6
UEBzc3cwcmQ=
235 Authentication succeeded
MAIL FROM: test@domaine.tld
250 ok
RCPT TO: test@shyrka.sys
250 ok
DATA
354 go ahead
Reply-to: fulltest@domaine.tld
Subject: Message de test
Ceci est un message de test.
Voilà un exemple de retour à la ligne.
.
250 ok
QUIT
221 serveur.domaine.tld
Connection closed by foreign host

Même si les commentaires suivants les codes de retour peuvent être modifiés par la configuration du serveur SMTP, les codes, eux, sont standardisés. Voici les principaux :

Code Signification
220 Connexion réussie.
221 Fin de la connexion.
235 Authentification réussie.
250 Commande acceptée.
334 Attente de réponse de la part du serveur.
354 En attente des données.
421 Échec temporaire de la connexion. Il s'agit d'un problème technique générale au niveau du serveur SMTP.
452 Échec temporaire concernant les destinataires. La liste des destinataires indiquées dépassent la capacité de traitement du serveur.
535 Authentification échouée.
550 Échec permanent. La boîte mail n'existe pas/plus ou et invalide.
554 Échec permanent. Le serveur client est blacklisté par le serveur hôte.
Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • telnet_mail.txt
  • Dernière modification : 2021/03/05 14:08
  • de nekan