Patrice Ferlet
Patrice Ferlet
Créateur de ce blog.
Publié le nov. 30, 2008 Temps de lecture: 2 min

Me suivre sur Mastodon

Envoi de mail avec netcat

On m’a demandé récemment comment envoyer un mail avec netcat (commade nc). En réalité, la question qu’on m’a posé venait d’un problème qui apparaît dés le moment où nous voulons envoyer toutes les commandes SMTP en bloc… Je vais vous montrer le problème et la solution.

D’abord, testons un envoi de mail en mode “interactif”, chose qui doit marcher. Utiliser le smtp de votre fournisseur d’accès, vous verrez que cela doit fonctionner.

$ nc smtp.provider.com 25
helo serveur.mail.org
mail from:<moi@serveur.mail.org>
rcpt to:<dest@domain.org>
data
Subject: Test de mail
Le contenu du mail...
.
quit

Ici, je me connecte au serveur smtp.provider.com (qui n’éxiste pas, c’est un exemple…) puis je donne mon identité de serveur via la commande “helo”. Je défini qui envoi le mail, puis à qui je l’envoi. Ensuite, je donne mes données, et je termine par un point suivit de la commande “quit” pour quitter.

Ca a fonctionné ? alors on va tenter de faire la même chose mais d’un seul bloc:

$ nc server.provider.com 25 <<EOF
helo serveur.mail.org
mail from:<moi@serveur.mail.org>
rcpt to:<dest@domain.org>
data
Subject: Test de mail
Le contenu du mail...
.
quit
EOF

Pour 8 personnes sur 10 cela ne va pas marcher. En fait, chaque commande smtp attend une réponse… mais en envoyant les commandes d’un seul bloc le serveur en face n’a pas le temps de répondre que les autres commandes sont envoyées.

Il suffit de dire à netcat d’attendre une seconde entre chaque commande pour que cela se passe bien, l’option est simplement **-i 1**, voici donc comment je m’y prend:

$ nc -i 1 server.provider.com 25 <<EOF
helo serveur.mail.org
mail from:<moi@serveur.mail.org>
rcpt to:<dest@domain.org>
data
Subject: Test de mail
Le contenu du mail...
.
quit
EOF

Alors effectivement, j’utilise l’envoi en bloc depuis l’entrée standard, mais rien ne vous empêche de mettre les commandes SMTP dans un fichier texte, puis de diriger la sortie dans netcat:

$ nc -i 1 server.provider.com 25 < mail_comands.txt
#ou 
$ cat mail_comands.txt | nc -i 1 server.provider.com 25

C’est simple et efficace !

comments powered by Disqus