La fonction mail() est intégrée à PHP et permet d’envoyer des courriels directement à partir d’un serveur web. C’est un moyen simple d’envoyer des notifications, des messages de formulaires de contact, des confirmations de commande et d’autres types de messages.
Elle convient pour les fonctionnalités de base de l’email sans utiliser de bibliothèques externes.
Lorsque vous appelez la fonction mail(), PHP transmet le message à l’agent de transfert de courrier (MTA) installé sur le serveur (typiquement Sendmail ou Postfix). Le MTA traite alors le message et le délivre à l’adresse spécifiée.
mail(to, subject, message, headers, parameters) ;
Paramètre | Description du paramètre |
---|---|
$to | Adresse électronique du destinataire. Vous pouvez spécifier plusieurs adresses séparées par des virgules. |
$subject | Objet de l’e-mail. Ne doit pas contenir de retour à la ligne. |
$message | Corps principal du message. |
$headers | En-têtes supplémentaires tels que From, Reply-To, Cc, Bcc, etc. |
$parameters | Paramètres supplémentaires, tels que la spécification de l’expéditeur pour Sendmail (-f). |
<?php
$to = "user@example.com";
$subject = "Test Email";
$message = "Hello! This is a test email sent using PHP.";
$headers = "From: webmaster@yourdomain.com";
mail($to, $subject, $message, $headers);
?>
Si vous ne spécifiez pas d’en-tête From :, la plupart des serveurs de messagerie rejetteront le message en le qualifiant de suspect ou de spam.
$headers = "From : noreply@yourdomain.com" ;
Utilisez \r\n pour séparer les lignes de votre message :
$message = "Hello,\NMerci pour votre commande.\NBest regards,\NVotre équipe" ;
Utilisez \r\n pour séparer plusieurs en-têtes comme Reply-To, Cc, et Bcc :
$headers = "From : admin@yourdomain.com\r\n" ;
$headers .= "Reply-To : support@yourdomain.com\r\n" ;
$headers .= "Cc : someone@yourdomain.com\r\n" ;
La fonction mail() ne prend pas en charge les pièces jointes de manière native. Mais vous pouvez envoyer des emails en HTML ou définir le type de contenu manuellement :
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: info@yourdomain.com";
$message = "<h1>Hello!</h1><p>Your order has been received.</p>";
mail("user@example.com", "Order Confirmation", $message, $headers);
Problèmes courants et solutions
Problème | Cause / Solution |
---|---|
L’e-mail n’a pas été délivré | En-tête From : manquant ou IP du serveur sur une liste noire |
L’e-mail n’est pas envoyé du tout | Aucun MTA n’est installé (par ex. Sendmail/Postfix requis) |
Erreur : mail() a été désactivé | mail() est désactivé dans php.ini (souvent par la politique de l’hébergeur) |
Le texte russe apparaît comme ? ??? | Le jeu de caractères n’est pas défini sur UTF-8 dans les en-têtes |
Les courriels sont envoyés dans les spams | From incorrect, pas de SPF/DKIM, ou domaine mal configuré |
La fonction mail() est un outil basique mais puissant pour envoyer des courriels directement à partir de scripts PHP. Elle est :
Il convient toutefois de garder à l’esprit ses limites :
Si vous prévoyez d’envoyer régulièrement des courriels, assurez-vous que votre serveur est correctement configuré pour le courrier sortant (avec Sendmail/Postfix installé, les enregistrements SPF/DKIM configurés et la fonction mail() activée dans php.ini).