Magazine Internet

Le protocole SMTP

Publié le 01 juillet 2009 par Methylbro

Emailing avec PHP : Pourquoi faut il éviter la fonction mail() ?Comme pour beaucoup de choses en PHP ; pour bien saisir les points faible d'une méthode par rapport à une autre ; il faut avant tout maîtriser le sujet que l'on traite. Ici il s'agit de l'envoi de courrier électronique et donc implicitement de l'utilisation du protocole SMTP (Simple Mail Transfert Protocol).

Comme son nom l'indique ; le protocole SMTP est très simple. Il est même parmi les protocoles les plus simple à comprendre. Il suffit simplement de signaler au serveur SMTP qui est l'émetteur d'un message, quel est son destinataire et de rédiger enfin le dit message et il s'occupe du reste.

C'est ce que fait la fonction mail() de PHP pour vous. Elle se connecte et donne au serveur SMTP défini dans votre php.ini toutes ces informations. Pour mieux comprendre donc comment cette dernière fonctionne ; je vous invite à faire un petit test. Envoyer vous-même ; sans client mail, sans fonction mail, un courrier à l'aide du protocole SMTP.

Comme mes statistiques me signalent que 76,26 % de mes visiteurs sont des utilisateurs de Windows (bouh les vilains) je vais donc réaliser cet exemple sous XP. Nous allons communiquer avec notre serveur SMTP directement en ligne de commande dans le terminal et avec l'aide de telnet.

Sous Windows ; ouvrez donc un nouveau terminal : Démarrer > Exécuter : cmd

La première chose à faire c'est se connecter à un serveur SMTP. Ici je vais utiliser celui d'orange (smtp.orange.fr) mais pour être sur que ce petit test fonctionne chez vous ; je vous conseille d'utiliser le serveur SMTP de votre fournisseur d'accès.

Nous ouvrons donc une connexion avec le serveur SMTP :

telnet smtp.orange.fr 25

protocole SMTP

Le serveur vous renvoie alors un code 220 ; ce qui signifie que tout c'est bien passé, et que vous avez désormais une connexion établie entre votre poste client et le serveur SMTP.

protocole SMTP

Une fois correctement connecté à votre serveur SMTP ; il faut commencer par s'identifier. C'est le rôle de la commande EHLO (anciennement HELO).

Dans notre exemple ; nous allons nous déclarer comme un utilisateur inconnu ; cela n'a que peut d'importance pour le moment (surtout sur un serveur SMTP public).

EHLO unknown

protocole SMTP

Une fois cette commande exécutée, le serveur nous retourne un code 250 (OK) pour nous dire que tout c'est bien passé.

protocole SMTP

Nous disposons donc désormais d'une connexion prête à l'emploi pour envoyer un message à notre serveur SMTP.

Afin de pouvoir envoyer un message ; nous allons devoir fournir à notre serveur SMTP trois informations :

  1. l'adresse de l'émetteur du message
  2. l'adresse du ou des destinataires du message
  3. le contenu du message

Commençons donc par les coordonnées de l'émetteur du message. Vous devez utiliser la commande MAIL FROM pour les indiquer au serveur ; par exemple :

MAIL FROM:<[email protected]>

protocole SMTP

Si tout se passe bien ; que vous avez saisie l'adresse correctement, le serveur SMTP devrait à nouveau vous retourner un code 250 (OK) pour vous dire que tout c'est bien passé.

protocole SMTP

De la même façon que pour l'émetteur du message ; nous devons maintenant spécifier le ou les destinataires. Pour cela nous devons utiliser la commande RCPT TO. Vous pouvez l'utiliser autant de fois que vous avez de destinataires.

RCPT TO:<[email protected]>

protocole SMTP

Si tout se passe bien ; que vous avez saisie l'adresse correctement, le serveur SMTP devrait à nouveau vous retourner un code 250 (OK) pour vous dire que tout c'est bien passé.

protocole SMTP

Maintenant il ne nous reste plus qu'à indiquer le contenu du message que l'on souhaite envoyer.

Pour ce faire nous devons utiliser la commande DATA. La commande DATA va nous laisser rédiger le contenu de notre message jusqu'à ce que le serveur reçoive la pseudo commande <CR><LF>.<CR><LF>

DATA
Bonjour !
.

protocole SMTP

protocole SMTP

protocole SMTP

Une fois le contenu du message envoyé au serveur SMTP ; celui-ci va nous répondre que le message à bien été pris en compte et qu'il a été mis en file d'attente avant envoi. On peut donc considérer que le message à bien été envoyé.

protocole SMTP

On peut donc clore la connexion ouverte entre le client et le serveur SMTP. Pour cela ; on utilise la commande QUIT.

QUIT

protocole SMTP

Lors du développement de vos script PHP il est en effet plus agréable d'utiliser la fonction mail() ; qui propose une véritable interface simple d'utilisation plutôt que d'avoir à réaliser soit même toutes ces opérations (ouverture d'un socket, transaction avec le serveur SMTP …).

Malheureusement cette fonction possède bon nombre d'inconvénient. En termes de sécurité tout d'abord ; car sur un script mal conçue, rien n'empêche les injections. Mais également en termes de consommation de ressources dans le cadre d'un envoi en masse de courriers ; pour de l'emailling par exemple.


Pour plus d'informations sur le protocole SMTP, je vous conseille de lire la RFC 2821. Vous pourrez en trouver une traduction francaise sur le site abcdrfc.free.fr.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Methylbro 17 partages Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte