PHP Email · 4 min read · Oct 25, 2025

Envoyer des e-mails depuis PHP

Envoyer des e-mails depuis PHP

Ce tutoriel montre comment vous pouvez facilement envoyer des messages électroniques depuis un serveur web compatible PHP. Il peut être utilisé pour traiter les données de formulaires, envoyer des alertes, etc. Il explique également un peu le formatage des en-têtes d’e-mail.

Configuration du système

Évidemment, vous devez avoir un serveur web installé avec PHP. Vous devez également vous assurer que votre système d’exploitation dispose d’un agent de messagerie installé (par exemple Sendmail sur Linux ou service SMTP sous IIS). Et assurez-vous que le port 25 n’est pas bloqué. Cela est requis même si vous relayez des messages via un second serveur.

La fonction mail de PHP est activée par défaut. Cependant, vous pouvez spécifier des options supplémentaires dans le fichier ‘php.ini’ dans la section [mail function] (ligne # autour de 700).

Syntaxe

Voici la syntaxe complète de la commande mail() :

bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );

Les 3 premiers paramètres ne nécessitent aucune explication : adresse e-mail du destinataire, sujet du message, contenu du message. Le paramètre $additional_headers comprend les en-têtes d’e-mail que je listerai plus tard. $additional_parameters est utilisé pour passer des options spécifiques au programme utilisé pour envoyer l’e-mail (comme sendmail) et est rarement utilisé. Vous devez consulter les pages de manuel de sendmail pour la liste des options.

Le minimum absolu exige que vous spécifiiez ceci :

mail ( $email_address_to , $subject, $message_contents );

Cependant, il est recommandé de définir des en-têtes supplémentaires pour des raisons de conformité. Le message électronique doit être compatible avec la RFC #822.

L’exemple ci-dessous montre quelques en-têtes d’e-mail qui peuvent être utilisés :

  • From : L’adresse e-mail de l’expéditeur.
  • Reply-To : L’adresse e-mail à laquelle les réponses doivent être envoyées.
  • Return-Path : Ceci est utilisé dans le cas où le message n’est pas livré et doit être retourné.
  • Subject : Sujet de l’e-mail.
  • CC : Copie carbone. Une liste séparée par des virgules d’autres destinataires qui sera vue par tous les autres destinataires.
  • BCC : Copie carbone invisible. Une liste séparée par des virgules d’autres destinataires qui ne sera pas vue par d’autres destinataires.
  • Content-type : Définit le type MIME du message.
  • X-Mailer : Spécifie le client de messagerie utilisé pour envoyer le message.

Il est important de se rappeler que les noms d’en-têtes sont sensibles à la casse et que chaque en-tête doit se terminer par des caractères retour et nouvelle ligne.

Chaque message est routé via un minimum de 2 serveurs de messagerie (expéditeur et destinataire). Cependant, il peut y avoir plus de serveurs de messagerie sur le chemin, tels que des serveurs de relais, des serveurs antiSPAM, etc. Chacun d’eux ajoutera ses propres en-têtes à votre message. Vous devez également garder à l’esprit que votre serveur web pourrait, selon les paramètres, échanger certains champs d’en-tête tels que Return-Path. Notez que ce champ n’affecte pas l’adresse de réponse.

Exemple

Voici un exemple simple qui enverra un message électronique :

Exemple complet

Cet exemple montre une structure plus organisée avec plus d’options et plus d’en-têtes :

";
   $email_return_to = "[email protected]";
   $email_content_type = "text/html; charset=us-ascii";
   $email_client = "PHP/" . phpversion();
// ------------------------- //

// --- DÉFINIR LES EN-TÊTES --- //
   $email_header = "From: " . $email_sender . "\r\n";
   $email_header .= "Reply-To: " . $email_return_to . "\r\n";
   $email_header .= "Return-Path: " . $email_return_to . "\r\n";
   $email_header .= "Content-type: " . $email_content_type . "\r\n";
   $email_header .= "X-Mailer: " . $email_client . "\r\n";
// ---------------------- //

// --- SUJET ET CONTENUS --- //
   $email_subject = "Sujet de test de l'e-mail";
   $email_contents = "";
   $email_contents .= "

Test Email

"; $email_contents .= "
Expéditeur : " . $email_sender; $email_contents .= "
Destinataire : " . $email_recipient; $email_contents .= ""; // ---------------------------- // $email_result = mail($email_recipient, $email_subject, $email_contents, $email_header); if ($email_result) echo "L'e-mail a été envoyé !"; else echo "L'envoi de l'e-mail a échoué !"; ?>
  • Remarque : L’implémentation de mail() sous Windows diffère à bien des égards de l’implémentation Unix. Tout d’abord, elle n’utilise pas un binaire local pour composer des messages mais fonctionne uniquement sur des sockets directs, ce qui signifie qu’un MTA est nécessaire à l’écoute sur un socket réseau (qui peut être soit sur l’hôte local, soit sur une machine distante). Deuxièmement, les en-têtes personnalisés comme From:, Cc:, Bcc: et Date: ne sont pas interprétés par le MTA au départ, mais sont analysés par PHP. En tant que tel, le paramètre to ne doit pas être une adresse sous la forme “Quelque chose < [email protected] >”. La commande mail peut ne pas analyser cela correctement lors de la communication avec le MTA.
  • Remarque : Il convient de mentionner que la fonction mail() n’est pas adaptée pour des volumes plus importants d’e-mails dans une boucle. Cette fonction ouvre et ferme un socket SMTP pour chaque e-mail, ce qui n’est pas très efficace.
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.