Les mails
L’envoi d’un email repose sur un protocole : SMTP (Simple Mail Trasnfer Protocol). Il est envoyé par des clients de messagerie : MUA (Mail User Agent).
Le MUA va vérifier si le nom de la personne existe dans ce domaine au MTA (Mail Transfer Agent). Le client qui recoit le mail passe par POP (Post Office Protocol) /IMAP ( Protocol) pour recevoir le mail stocké sur le MTA
Identifier les serveurs SMTP
Obtenir la liste des SMTP pour un serveur :
Utilisation des mails en PHP
Sous UNIX :
Sous UNIX, le serveur doit disposer impérativement de sendmail pour envoyer un mail.
En PHP, il est possible de passer outre le sendmail grace à un wrapper. Dans tous les cas, on doit configurer, dans le php.ini, on retrouve :
; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path =
Sous Windows
PHP s’adresse au MTA directement via le SMTP. Pour utiliser les mails sous windows, dans php.ini, on peut renseigner l’expediteur par défaut :
ATTENTION : Le port par défaut est le port 25. On peut le modifier sous le php.ini
La sécurité
Certains hebergeurs configurent leur MTA de sorte qu’il n’accepte que les courriers sécurisés avec le protocole SASL (Simple Authentification And Security Layer).
Sous UNIX les mails sont automatiquement authentifiés et sécurisés alors que sous Windows, les mails ne sont pas sécurisés.
Si le mail est envoyé sans SASL sur un serveur SASL, php va afficher une erreur
Pour éviter ce probleme sous Windows, il faut recompiler PHP en activant PCRE (Pearl Compatible Regular Expression)
Envoi des mails en PHP
Pour envoyer des mails, on utilisera la fonction mail() qui recherchera automatiquement sendmail. Sous UNIX, il faut autoriser le droit d’acces au logiciel sendmail
mail ( destinataire , objet , message [, entetes [, options]] );
mail() va renvoyer true ou false. Des erreurs s’afficheront si et seulement si la connexion avec sendmail ne s’est pas faite ou si le temps d’execution est trop long
Destinataire
//syntaxes correctes vous@domaine.com vous@domaine.com, autre@domaine.com vous @ domaine . com //le MTA va supprimer les espaces "prenom nom" <vous@domaine.com> //le MTA va recuperer automatiquement l'adresse vous //en local
Objet / Sujet
Le sujet ne doit surtout pas comporter de caractères de nouvelle ligne
Le message
Le message peut comporter des retours à la ligne et ils sont matérialisés par des n. Afin que ses LF soit pris en compte, on doit spécifier le message entre double quotes
Impératif : une ligne ne doit pas comporter plus de 70 caractères. Sous Windows, lorsque PHP communique directement avec le SMTP, et que le message comporte un point à la fin de la ligne, ou en début de ligne, il sera automatiquement supprimé. Pour éviter ce bug, on mettra un ..
Les entetes
Les entetes doivent être séparées entre elles avec un CRLF (rn). Le mail doit comporter dans son entête un From soit dans la fonction mail, soit dans le php.ini. Sous UNIX, certains MTA refusent le CRLF.
MIME (Multipurpose Internet Mail Extension)
Le MIME est un protocole (standard), c’est une extesnion du SMTP permettant d’envoyer des données en divers formats et/ou pieces jointes.
Pour envoyer un mail HTML, il faut spécifier au MUA que s’en est. Il faudra placer dans l’entete
Mime-Version 1.0 Content-Type: text/html, charset:"ISO-8859-1" Content-Transfer-Encoding: 8 bits
Pour envoyer plusieurs elements dans un meme message, on devra utiliser le type MIME multipart dans le Content-Type
Les multiparts
text/plain //Permet l'envoi du fichier texte brut multipart/mixed //Permet de spécifier l'absence de liens entre les différents blocs multipart/alternative //Le document est sous différents blocs mais différent les uns des autres (ex: texte / image / pdf = meme document) multipart/related //Les différents blocs sont nécéssaires pour consituer le document
Chaque bloc sera séparé par un boundary unique. On utlisera md5(time()) pour s’assurer de l’unicité du boundary.
Ecriture du message
Voir la RFC1521 sur MIME

Commentaires récents