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.

  • 📧 Que fait la fonction mail() ? La fonction mail() envoie un courriel à partir d'un script, en prenant en compte le destinataire, l'objet, le message et les en-têtes optionnels.
  • (I.e. Transport SMTP : Le système de messagerie PHP utilise le protocole SMTP, dont l'hôte, le port et l'authentification sont définis dans le fichier de configuration php.ini.
  • 📋 CC et CCI : Les en-têtes optionnels ajoutent des destinataires en copie carbone et en copie carbone invisible, cette dernière étant masquée aux autres destinataires.
  • 🛡️ Assainir les données d'entrée : filter_var avec FILTER_SANITIZE_EMAIL et FILTER_VALIDATE_EMAIL bloque l'injection d'en-tête à partir de l'entrée du formulaire de contact.
  • (I.e. Sécurisés Mail: Le chiffrement de la connexion avec SSL ou TLS protège le contenu des messages contre la lecture pendant leur transmission.
  • 🧰 Utilisez PHPMailer: PHPMailer ajoute l'authentification SMTP, les pièces jointes et les e-mails HTML, ce qui le rend plus fiable que la fonction mail() brute.
  • 🤖 Assistance IA : Les outils d'IA peuvent configurer PHPMailNous utilisons le protocole SMTP et proposons des solutions pour éviter que vos e-mails n'atterrissent dans le dossier spam.

PHP Mail

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.

Simple Mail Transmission Passerelle

  • Cliquez sur le menu Rechercher…

Simple Mail Transmission Passerelle

  • La boîte de dialogue Rechercher s'affichera.

Simple Mail Transmission Passerelle

  • Cliquez sur le bouton « Trouver suivant ».

Simple Mail Transmission Passerelle

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 :

Simple Mail Transmission Passerelle

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 :

Désinfection des entrées des utilisateurs de courrier électronique

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.

FAQ

La cause la plus fréquente est l'absence de serveur de messagerie configuré sur localhost. Définissez les valeurs SMTP correctes dans php.ini, ou utilisez PHP.MailUtilisez un compte SMTP authentifié. Consultez également le journal des erreurs du serveur et votre dossier de courriers indésirables.

Ajoutez des en-têtes définissant MIME-Version sur 1.0 et Content-Type sur text/html, puis insérez le balisage HTML dans le corps du message. PHPMailer gère cela automatiquement lorsque vous définissez son option isHTML(true).

La fonction FILTER_SANITIZE_STRING est obsolète depuis PHP 8.1. Utilisez htmlspecialchars() pour échapper la sortie à l'affichage, ou un validateur spécifique tel que FILTER_VALIDATE_EMAIL, selon que vous nettoyiez ou vérifiiez la valeur.

Oui. Indiquez à l'IA votre serveur SMTP, votre port et votre type de sécurité, et elle générera le script PHP complet.MailConfigurez l'authentification, l'expéditeur, les destinataires et la gestion des erreurs. Stockez les informations d'identification dans des variables d'environnement, et non dans le code.

Oui. L'IA peut vous conseiller sur les enregistrements SPF, DKIM et DMARC, l'utilisation d'un expéditeur SMTP authentifié, l'évitement des mots déclencheurs de spam et la configuration d'une adresse d'expéditeur valide, puis vous aider à tester la délivrabilité.

Résumez cet article avec :