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ètreDescription du paramètre
$toAdresse électronique du destinataire. Vous pouvez spécifier plusieurs adresses séparées par des virgules.
$subjectObjet de l’e-mail. Ne doit pas contenir de retour à la ligne.
$messageCorps principal du message.
$headersEn-têtes supplémentaires tels que From, Reply-To, Cc, Bcc, etc.
$parametersParamè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èmeCause / 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 toutAucun 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 spamsFrom 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).