L’envoi de courriels par SMTP

 

Le transfert des courriels se fait grâce à un protocole d’envoi des messages entre les serveurs et ensuite par deux protocoles différents pour lire les messages. Cet article est uniquement pour expliquer le premier qui est SMTP (Simple Mail Transfert Protocol). Il est ainsi possible d’envoyer un message soit à votre fournisseur de service de courriels ou encore directement au serveur possédant la boite de l’utilisateur.

En temps normal, si vous utilisez Thunderbird ou Outlook, vous devez choisir le serveur SMTP auquel vous enverrez tous vos messages. Par la suite, ce serveur vérifiera la destination qui est l’hôte suivant l’arrobas. Le serveur peut être découvert en faisant un appel à un serveur DNS (Domain Name Server), mais en demandant le champ « MX » pour Mail Exchange. Pour voir un exemple, allez dans « Démarrer », « Exécuter » et entrer le nom du programme « nslookup ». Une fois dedans, écrivez « set q=MX » et appuyez sur « entrer ». Ensuite vous écrivez le nom d’hôte tel « hotmail.com » et faites « entrer ». Vous verrez ainsi l’adresse des serveurs sur lesquels se connecter avec le protocole SMTP.

Pour vous connecter sur la machine, vous pouvez utilisez la commande « telnet hôte 25 » (le nombre 25 étant le port par défaut sur lequel se connecter). Une fois la communication établie, il suffit d’attendre le message d’accueil. Voici un exemple de message de base envoyé. Le texte commençant par C est pour désigner le client et par S le serveur.

S: 220 mx4.hotmail.com Postfix
C: HELO 192.168.1.1
S: 250 OK

C: MAIL FROM:<ti-guy@mavie.com>
S: 250 OK
C: RCPT TO:<ti-guy@hotmail.com>
S: 250 OK

C: DATA
S: 354 Enter mail, end with « . » on a line by itself
C: From: “Guillaume” <ti-guy@mavie.com>
C: To: <ti-guy@hotmail.com>
C: Date: Sat, 24 Jan 2009 20:58:26 -0500
C: Subject: Ceci est un test
C:
C: Héhé!
C: .
S: 250 OK Message accepted for delivery

C: QUIT
S: 221 Bye

La première partie en vert sert à se présenter. Ainsi le serveur commence et ensuite c’est le client avec la commande HELO. Cette étape est obligatoire, malgré qu’elle est totalement inutile puisque les serveurs ne font rien avec ce que nous écrivons après le HELO. Vous pouvez donc écrire ce qui vous chante.

Ensuite il y a la partie bleue qui dit de qui provient le message et à qui envoyer le message. Le email de provenance n’est jamais vérifié alors il est très facile de se faire passer pour n’importe qui. Vous pouvez donc écrire « bill.gates@microsoft.com » si cela vous chante (je ne crois pas que ce soit véritablement son adresse). Ensuite pour la destination, vous pouvez appeler plusieurs fois de suite la fonction « RCPT TO » pour envoyer le message à plusieurs destinataires. Si vous vous connectez directement sur un serveur comme Hotmail, vous ne pourrez normalement qu’écrire des adresses appartenant à Hotmail parce que ce ne sont pas des relais comme celui votre service de courriel.

En orange, nous avons le fameux message. Il commence par un « DATA » et fini par une ligne avec seulement un « . ». Tout ce qui est écrit là-dedans est envoyé tel quel. Vous n’avez pas à mettre autant de choses que j’ai mis tel « From », « To », « Date » et « Subject » puisque ceux-ci ne font pas partie de SMTP en temps que tel. Par contre, tous les lecteurs de courriels s’attendent à voir quelques champs pour donner le plus d’informations possible sur le message avant même que celui-ci soit ouvert.

Et pour terminer, il faut dire « QUIT » au serveur et attendre qu’il réponde par « Bye » avant de couper la ligne.

Le problème du protocole

Le plus grave problème est le manque de mécanisme de vérification de l’émetteur. N’importe quelle machine peut envoyer des courriels à n’importe quel autre serveur. C’est pour cette raison que le SPAM prolifère si facilement sur le net. Il suffit d’écrire d’avance le petit texte complet que nous voulons envoyer et le lancer dans le serveur.

Il y a quand même quelques façons de contrer les SPAM à cette étape. Par exemple, le serveur peut mettre des délais avant chaque réponse de sa part et regarder si le client va attendre avant d’envoyer sa prochaine commande. Si tel n’est pas le cas, le client a été fabriqué rapidement et c’est donc louche. Une autre technique utilisée est de mettre un délai avant de dire « Bye » et voir si la connexion va être coupée avant. C’est encore pour vérifier si le client suit bien le protocole.