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.
Comment fonctionne mail()
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.
Syntaxe de la fonction
mail(to, subject, message, headers, parameters) ;
Paramètres
| 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). |
Exemple simple
<?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);
?> Notes importantes
1. De : L’en-tête est obligatoire
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" ;
2. Formatage des messages multilignes
Utilisez \r\n pour séparer les lignes de votre message :
$message = "Hello,\NMerci pour votre commande.\NBest regards,\NVotre équipe" ;
3. En-têtes multiples
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" ;
Exemple : Envoi d’un courriel HTML (texte seulement)
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é |
Conclusion
La fonction mail() est un outil basique mais puissant pour envoyer des courriels directement à partir de scripts PHP. Elle est :
- Facile à utiliser
- Ne nécessite pas de bibliothèques supplémentaires
- Convient pour les notifications internes, les formulaires de contact et les autorépondeurs
Il convient toutefois de garder à l’esprit ses limites :
- Dépend de la configuration de messagerie du serveur
- Ne prend pas en charge les pièces jointes
- Peut être désactivé par défaut dans certains environnements d’hébergement partagé
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).


