Comment envoyer un e-mail à l'aide de la fonction PHP mail()
⚡ Résumé intelligent
La fonction mail() de PHP est intégrée et permet d'envoyer des e-mails directement depuis un script PHP en utilisant le protocole SMTP du serveur. Ce guide aborde la syntaxe et les paramètres de mail(), la configuration SMTP dans php.ini, la validation des entrées utilisateur avec filter_var, l'envoi d'e-mails sécurisés et l'utilisation de PHP.Mailpour une livraison fiable.

Qu'est-ce que la messagerie PHP ?
La fonction mail de PHP est une fonction intégrée de PHP qui permet d'envoyer des e-mails depuis des scripts PHP.
La fonction mail accepte les paramètres suivants :
- Adresse courriel
- Sujet
- Message
- Adresses e-mail CC ou BCC
Pourquoi et quand utiliser PHP Mail
La fonction de messagerie est utile dans de nombreuses situations :
- C'est une méthode économique pour informer les utilisateurs des événements importants.
- Permettez aux utilisateurs de vous contacter par e-mail en fournissant un formulaire de contact sur le site Web qui envoie par e-mail le contenu fourni.
- Les développeurs peuvent l'utiliser pour recevoir les erreurs système par e-mail.
- Vous pouvez l'utiliser pour envoyer un e-mail à vos abonnés à la newsletter.
- Vous pouvez l'utiliser pour envoyer des liens de réinitialisation de mot de passe aux utilisateurs qui ont oublié leur mot de passe.
- Vous pouvez l'utiliser pour envoyer par courriel des liens d'activation et de confirmation. Cela s'avère utile lors de l'inscription des utilisateurs et de la vérification de leurs adresses courriel.
Envoi de courrier en utilisant PHP
La fonction mail de PHP possède la syntaxe de base suivante.
<?php mail($to_email_address,$subject,$message,[$headers],[$parameters]); ?>
ICI,
- "$to_email_address" est l'adresse e-mail du destinataire du courrier
- "$subject" est le sujet de l'e-mail
- « $message » est le message à envoyer.
- « [$headers] » est facultatif ; il peut être utilisé pour inclure des informations telles que CC et BCC.
- CC signifie « copie carbone ». On l'utilise lorsqu'on souhaite envoyer une copie à une personne intéressée ; par exemple, un courriel de réclamation adressé à une entreprise peut également être envoyé en copie à l'organisme chargé des réclamations.
- CCI est l'acronyme de « copie carbone invisible ». Similaire à CC, le champ CCI ne contient pas d'adresses électroniques visibles par les autres destinataires.
Simple Mail Transmission Protocole (SMTP)
PHP Mail utilise le Simple Mail Transmission Protocole (SMTP) pour envoyer du courrier.
Sur un serveur hébergé, les paramètres SMTP auraient déjà été configurés.
Les paramètres de messagerie SMTP peuvent être configurés à partir du fichier « php.ini » situé dans le dossier d'installation de PHP.
Pour configurer les paramètres SMTP sur votre machine locale, en supposant que vous utilisiez XAMPP sur Windows, localisez le fichier « php.ini » dans le répertoire « C:\xampp\php ».
- Ouvrez-le avec le Bloc-notes ou tout autre éditeur de texte. Nous utiliserons le Bloc-notes dans cet exemple. Cliquez sur le menu Édition.
- Cliquez sur le menu Rechercher…
- La boîte de dialogue Rechercher s'affichera.
- Cliquez sur le bouton « Trouver suivant ».
Repérez les entrées sous [fonction mail]. Les lignes par défaut ressemblent généralement à ceci :
- ; SMTP = hôte local
- ; port_smtp = 25
Supprimez les points-virgules avant SMTP et smtp_port, et configurez SMTP sur votre Le serveur SMTP et le port correspondant à votre port SMTP. Vos paramètres devraient ressembler à ceci :
- SMTP = smtp.exemple.com
- port_smtp = 25
Remarque : les paramètres SMTP peuvent être obtenus auprès de votre fournisseur d'hébergement web. Si le serveur requiert une authentification, ajoutez les lignes suivantes :
- auth_username = exemple_username@example.com
- auth_password = exemple_password
Enregistrez les modifications et redémarrez le Apache serveur.
PHP Mail Exemple
Prenons maintenant l'exemple de l'envoi d'un simple courriel.
<?php $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; mail($to_email,$subject,$message,$headers); ?>
Sortie :
Remarque : l’exemple ci-dessus ne prend en compte que les 4 paramètres obligatoires. Vous devez remplacer l’adresse e-mail fictive par une adresse e-mail réelle.
Désinfection des entrées des utilisateurs de courrier électronique
L'exemple ci-dessus utilise des valeurs codées en dur dans le code source pour l'adresse e-mail et d'autres détails par souci de simplicité.
Supposons que vous deviez créer un formulaire de contact où les utilisateurs remplissent leurs coordonnées puis le soumettent.
- Les utilisateurs peuvent injecter accidentellement ou intentionnellement du code dans les en-têtes, ce qui peut entraîner l'envoi de courriers indésirables.
- Pour protéger votre système contre de telles attaques, vous pouvez créer une fonction personnalisée qui nettoie et valide les valeurs avant l'envoi du courrier.
Créons une fonction personnalisée qui valide et nettoie l'adresse e-mail à l'aide de la fonction intégrée `filter_var`. Cette dernière sert à nettoyer et valider les données saisies par l'utilisateur.
Il a la syntaxe de base suivante.
<?php filter_var($field, SANITIZATION_TYPE); ?>
ICI,
- «filter_var(…)» est la fonction de validation et de désinfection
- « $field » est la valeur du champ à filtrer.
- « SANITIZATION_TYPE » correspond au type de désinfection à effectuer sur le terrain, par exemple :
- FILTRE_VALIDER_EMAIL – Renvoie vrai pour les adresses e-mail valides et faux pour les adresses e-mail invalides.
- FILTER_SAnitIZE_EMAIL – supprime les caractères illégaux des adresses e-mail, de sorte qu'une adresse contenant des caractères parasites est réduite à info@domaine.com.
- FILTRER_ASSAINIR_URL – supprime les caractères illégaux de URLs, en laissant une adresse propre telle que https://www.example.com.
- FILTER_SANITIZE_STRING – Supprime les balises des chaînes de caractères ; ainsi, « am bold » devient « am bold ». Notez que ce filtre est obsolète depuis PHP 8.1 ; utilisez plutôt htmlspecialchars().
Le code ci-dessous utilise une fonction personnalisée pour envoyer des courriels sécurisés.
<?php function sanitize_my_email($field) { $field = filter_var($field, FILTER_SANITIZE_EMAIL); if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } } $to_email = 'name@example.com'; $subject = 'Testing PHP Mail'; $message = 'This mail is sent using the PHP mail function'; $headers = 'From: noreply@example.com'; // check if the email address is invalid $secure_check = sanitize_my_email($to_email); if ($secure_check == false) { echo "Invalid input"; } else { // send email mail($to_email, $subject, $message, $headers); echo "This email is sent using PHP Mail"; } ?>
Sortie :
Sécurisés Mail
Les e-mails peuvent être interceptés lors de leur transmission par des destinataires involontaires.
Cela peut exposer le contenu du courriel à des destinataires non prévus.
Le courrier sécurisé résout ce problème en transmitenvoyer des courriels via une connexion chiffrée utilisant SSL ou TLS, par exemple SMTP sur SSL sur le port 465 ou STARTTLS sur le port 587.
Le chiffrement brouille le message avant son envoi, de sorte que seul le serveur de messagerie du destinataire prévu puisse le lire.
PHPMailer : Une meilleure alternative à mail()
Pour les applications réelles, la plupart des développeurs utilisent PHPMailUtilisez la bibliothèque er au lieu de la fonction mail() brute. PHPMailIl s'authentifie auprès d'un serveur SMTP externe, ce qui améliore considérablement la délivrabilité, et simplifie l'envoi de pièces jointes et de courriels HTML.
Installez-le avec Composer, puis envoyez des e-mails via une connexion SMTP authentifiée et chiffrée comme indiqué ci-dessous.
<?php use PHPMailer\PHPMailer\PHPMailer; require 'vendor/autoload.php'; $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.example.com'; $mail->SMTPAuth = true; $mail->Username = 'user@example.com'; $mail->Password = 'secret'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->setFrom('noreply@example.com', 'My App'); $mail->addAddress('name@example.com'); $mail->Subject = 'Testing PHPMailer'; $mail->Body = 'This email is sent using PHPMailer over SMTP'; $mail->send(); ?>
Comparé à mail(), PHPMailer vous offre l'authentification SMTP, le chiffrement intégré, la prise en charge des pièces jointes et une gestion des erreurs plus claire, c'est pourquoi il est le choix recommandé pour la messagerie électronique en production.






