Comment Envoyer des Mails à l’Aide de PHP Mail et PHPMailer

L’email fait partie intégrante de tout projet ou entreprise. Bien qu’il existe de nombreuses plates-formes de messagerie professionnelle, dont Hostinger, Zoho Mail et G Suite, vous pouvez également envoyer des mails en utilisant PHP. Dans ce tutoriel, nous apprendrons à envoyer des emails en utilisant la fonction PHP mail() intégrée et PHPMailer avec le protocole SMTP (Simple Mail Transfer Protocol).

Utilisation de la fonction PHP mail()

L’utilisation de la fonction PHP mail() fait appel au programme Sendmail, généralement configuré par l’administrateur système, qui permet d’envoyer des emails.

Pour utiliser cette fonction, assurez-vous que votre fournisseur d’hébergement vous permet de gérer manuellement l’option du service Sendmail.

Si vous utilisez déjà Hostinger, vous pouvez activer ou désactiver cette fonction en accédant au hPanel. Cliquez sur Emails -> Contrôle du service de messagerie.

Par défaut, le service Sendmail est déjà activé. Néanmoins, vous devriez le vérifier à nouveau pour en être sûr.

Création d’un fichier test pour PHP Mail

Tout d’abord, vous devez créer un fichier pour le script PHP Mail et le placer dans le répertoire public_html afin qu’il soit facilement accessible via le nom de domaine.

  1. Accédez au hPanel, cliquez sur le gestionnaire de fichiers.
  2. Créez un nouveau fichier en cliquant sur Ajouter nouveau. Nommons le fichier testmail.php, puis cliquez sur Créer.
  3. Double-cliquez sur le fichier testmail.php puisque nous allons l’éditer en utilisant la fonction PHP mail(). Voici un exemple des composants de base de la fonction que nous allons utiliser dans ce tutoriel. Ils seront expliqués plus en détail dans la section suivante. Pour l’instant, cliquez sur “Save & Close” lorsque vous avez terminé l’édition.
  4. Vous pouvez désormais envoyer un email en accédant à VotreDomaine/testmail.php depuis le navigateur. N’oubliez pas que vous devez changer VotreDomaine par votre vrai nom de domaine.
  5. L’email que vous avez choisi recevra le message que vous avez envoyé.
  6. La boîte de réception de votre destinataire recevant l'email de test.

Comprendre les composants de PHP Mail

Comme nous l’avons déjà mentionné, nous vous présenterons les composants d’un script PHP mail de base. Pour cet exemple, nous avons fourni une syntaxe basique d’email pour vous aider à comprendre cette fonction plus en détail.

Toutefois, si vous avez besoin de plus d’informations sur la fonction Sendmail et ses composants, vous pouvez vous référer à la documentation officielle de PHP.

Voici la syntaxe PHP que nous avons utilisée dans la section précédente :

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.fr";
    $to = "test@hostinger.fr";
    $subject = "Essai de PHP Mail";
    $message = "PHP Mail fonctionne parfaitement";
    $headers = "De :" . $from;
    mail($to,$subject,$message, $headers);
    echo "L'email a été envoyé.";
?>

Analysons les choses étape par étape :

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

Ces deux premières lignes permettent de signaler les erreurs – vous serez averti si le script échoue à s’exécuter.

$from = "test@hostinger-tutorials.fr";

Cette ligne doit contenir l’adresse email de l’expéditeur. La plupart des hébergeurs n’autorisent pas les adresses email aléatoires ici, car elles peuvent être utilisées pour le spoofing (attaque cybernétique qui consiste à se faire passer pour quelqu’un d’autre pour voler des informations ou des fonds, intaller des logiciels malveillants sur les appareils des victimes ou obtenir l’accès non autorisé à des systèmes ou ressources en ligne).

Utilisez une adresse créée avec votre nom de domaine ou votre marque pour exécuter PHP mail avec succès.

$to = "test@hostinger.fr";

C’est ici que vous insérez l’adresse email du destinataire.

$mail->AddAddress('carlosdemaria@ovh.net','Carlos Demaria');

Par exemple, vous ajouter ce destinataire avec alias.

$list_emails_to = array('johndoe@ovh.net','maxlamenace@ovh.net');
foreach ($list_emails_to  as $key => $email) {
  $mail->AddAddress($email);
}

Et là vous ajouter le ou less destinatires sans alias.

$subject = "Essai de PHP Mail";

Saisissez ici le sujet de votre email.

$mail->addBCC('hollow_man@ovh.net','Joseph Leroie');

Ici, vous ajoutez l’utilisateur en CCI/BBC (copie conforme invisible).

$mail->AddAttachment('./doc/content/rapport.pdf','Rapport_2018.pdf'); 

C’est pour ajouter une pièce jointe avec PHP mailer.

$message = "PHP Mail fonctionne parfaitement";

Ici, vous pouvez écrire votre message.

$headers = "De :" . $from;

Précise les informations essentielles, telles que l’adresse de l’expéditeur, le lieu de réponse, etc.

mail($to,$subject,$message, $headers);

Cette ligne est utilisée pour l’exécution de la fonction.

echo "L'email a été envoyé.";

Un message qui apparaîtra une fois que le script est exécuté avec succès.

Utilisation de PHPMailer pour l’envoi d’emails

PHPMailer est une bibliothèque populaire d’envoi des mails pour PHP. Elle prend en charge l’envoi par la fonction mail() ou par le protocole SMTP (Simple Mail Transfer Protocol). Cette bibliothèque simplifie le processus compliqué de construction d’un mail PHP en fournissant un ensemble de fonctions pour créer et envoyer un email.

L’installation de PHPMailer est assez simple, surtout si vous avez installé Composer. Si vous utilisez Hostinger, vous n’avez pas à vous en préoccuper car il est déjà préinstallé avec tous nos plans, même avec notre hébergement le moins cher.

Néanmoins, si vous devez installer PHPMailer manuellement, vous devez connecter à votre compte d’hébergement via un terminal SSH. Suivez les étapes suivantes :

  1. Téléchargez et installez le client SSH PuTTY.
  2. Accédez à votre tableau de bord hPanel, trouvez et cliquez sur Accès SSH sous la section Avancé.
  3. Prenez note des informations sur l’accès SSH. Vous aurez besoin de l’adresse IP SSH, port, nom d’utilisateur et mot de passe.
  4. Ouvrez PuTTY, puis définissez votre adresse IP SSH et votre port en conséquence.
configuration putty
  1. Appuyez sur “Open” et une fenêtre de terminal apparaîtra. Saisissez votre nom d’utilisateur et votre mot de passe SSH. Une fois cela fait, appuyez sur Entrée.

REMARQUE : PuTTY n’affichera pas votre mot de passe. Ne soyez pas confus si rien n’apparaît à l’écran pendant que vous tapez votre mot de passe.

  • Exécutez la commande suivante :
  • cd public_html
    
    1. Appuyez sur la touche Entrée, puis exécutez cette commande :
    composer require phpmailer/phpmailer
    
    1. Attendez un instant que le processus d’installation soit terminé.
    2. Processus d'installation de PHPMailer.

    Utilisation de PHPMailer avec SMTP de Hostinger

    Une fois que vous avez PHPMailer prêt, vous pouvez l’utiliser pour envoyer des mails PHP en utilisant le SMTP de Hostinger.

    1. Créez un compte email en accédant au hPanel, puis allez à Comptes E-mail -> Créer un nouveau compte e-mail. Saisissez votre nouvelle adresse email et définissez un mot de passe avant de cliquer sur Créer.
    1. Une fois que vous avez terminé, prenez connaissance des détails de votre SMTP que vous trouverez sous la section Paramètres de configuration :

    REMARQUE : Vous devez mémoriser le nom d’utilisateur du compte e-mail, le mot de passe du compte, l’hôte SMTP et le port SMTP pour envoyer un email via PHPMailer.

  • Créez un fichier testphpmailer.php dans le répertoire Public_html. Accédez au tableau de bord hPanel et cliquez sur Gestionnaire de fichiers.
  • Appuyez sur Ajouter nouveau. Nommez le fichier comme testphpmailer.php et cliquez sur Créer.
  • Double-cliquez sur le fichier testphpmailer.php nouvellement créé, puis copiez et collez ce qui suit :
  • <?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Host = 'smtp.hostinger.fr';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.fr';
    $mail->Password = 'VOTRE MOT DE PASSE ICI';
    $mail->setFrom('test@hostinger-tutorials.fr', 'Votre nom');
    $mail->addReplyTo('test@hostinger-tutorials.fr', 'Votre nom');
    $mail->addAddress('exemple@gmail.com', 'Nom du destinataire');
    $mail->Subject = 'Essai de PHPMailer';
    $mail->msgHTML(file_get_contents('message.html'), __DIR__);
    $mail->Body = 'Ceci est le contenu du message en texte clair';
    //$mail->addAttachment('test.txt');
    if (!$mail->send()) {
        echo 'Erreur de Mailer : ' . $mail->ErrorInfo;
    } else {
        echo 'Le message a été envoyé.';
    }
    ?>
    
    1. Modifiez le code ci-dessus en conséquence. Par exemple, vous devez remplacer VOTRE MOT DE PASSE ICI par le mot de passe de votre e-mail et test@hostinger-tutorials.fr par votre nom d’utilisateur, exemple@gmail.com par l’adresse e-mail de votre destinataire, etc. Une fois cela fait, cliquez sur Save & Close.
    2. Votre PHPMailer est maintenant prêt à être utilisé. Exécutez le script en vous rendant sur VotreDomaine/testphpmailer.php dans votre navigateur.

    Comprendre les composants de PHPMailer

    Pour comprendre comment fonctionne PHPMailer, examinons l’exemple de script ci-dessus qui utilise le SMTP pour l’envoi d’emails. Voici l’explication de chaque composant :

    use PHPMailer\PHPMailer\PHPMailer;
    

    Cette ligne importe la classe PHPMailer dans l’espace de noms global.

    require '../vendor/autoload.php';
    

    Il comprendra diverses bibliothèques dont PHPMailer a besoin.

    $mail->
    

    Toutes les variables similaires contiennent des informations essentielles, telles que les détails du serveur, les en-têtes de message, les pièces jointes, etc. En bref, elles garantissent que l’expéditeur est protégé par une authentification SMTP.

    if (!$mail->send()) {
    

    Définit ce qui se passe lorsque les scripts sont exécutés.

    echo 'Erreur de Mailer : ' . $mail->ErrorInfo;
    

    Il affichera un message d’erreur avec une explication lorsque le script échoue à l’envoi.

    } else {
    

    Indique ce qui se passe si le script est exécuté.

    echo 'Le message a été envoyé.';
    

    Si l’email est envoyé avec succès, ce message apparaîtra.

    CONSEIL : La ligne SMTPDebug = 2; n’est utile que lorsque vous testez un script et que vous voulez voir comment il fonctionne. Vous devez la changer en SMTPDebug = 0; si vous avez terminé le test. Ceci est fait pour éviter que l’utilisateur final ne voit le rapport de livraison SMTP.

    Si vous avez fait attention, vous remarquerez que nous faisons quelque chose d’un peu différent par rapport au premier exemple – nous envoyons un message HTML plutôt qu’un simple texte.

    Donc, votre message chargera son contenu à partir du fichier message.html situé dans le même répertoire – public_html.

    Ce format offre une plus grande fonctionnalité que les messages en texte brut, car le HTML est hautement personnalisable. Vous pouvez modifier la couleur, le style, les images ou même inclure des fichiers multimédias qui sont généralement obsolètes dans un email en texte brut.

    Formulaire de contact PHPMailer

    Vous pouvez utiliser PHPMailer pour bien plus que l’envoi d’un simple mail PHP. Vous pouvez notamment l’utiliser pour créer un formulaire de contact où vos visiteurs peuvent vous contacter.

    Voici un exemple de script :

    <?php
    use PHPMailer\PHPMailer\PHPMailer;
    require 'vendor/autoload.php';
        $mail = new PHPMailer;
        $mail->isSMTP();
        $mail->Host = 'smtp.hostinger.fr';
        $mail->Port = 587;
        $mail->SMTPAuth = true;
        $mail->Username = 'test@hostinger-tutorials.fr';
        $mail->Password = 'VOTRE MOT DE PASSE ICI';
        $mail->setFrom('test@hostinger-tutorials.fr', 'Votre nom');
        $mail->addAddress('exemple@gmail.com', 'Nom du destinataire');
        if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
            $mail->Subject = 'Formulaire de contact PHPMailer';
            $mail->isHTML(false);
            $mail->Body = <<<EOT
    E-mail: {$_POST['email']}
    Nom: {$_POST['name']}
    Message: {$_POST['message']}
    EOT;
            if (!$mail->send()) {
                $msg = 'Désolé, quelque chose a mal tourné. Veuillez réessayer plus tard.';
            } else {
                $msg = 'Message envoyé ! Merci de nous avoir contactés.';
            }
        } else {
            $msg = 'Partagez-les avec nous !';
        }
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Formulaire de contact</title>
    </head>
    <body>
    <h1>Vous avez des idées ?</h1>
    <?php if (!empty($msg)) {
        echo "<h2>$msg</h2>";
    } ?>
    <form method="POST">
        <label for="name">Nom: <input type="text" name="name" id="name"></label><br><br>
        <label for="email">E-mail: <input type="email" name="email" id="email"></label><br><br>   
        <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>
        <input type="submit" value="Envoyer">
    </form>
    </body>
    </html>
    

    Tout comme pour les scripts précédents, vous devez créer un nouveau fichier dans le dossier public_html. Dans ce cas, nous avons nommé le fichier formscript.php. Modifiez les informations à l’intérieur du script en conséquence. Ensuite, il vous suffit d’exécuter le script à partir de votre navigateur.

    Voici à quoi ressemble le résultat final :

    Exemple de formulaire de contact interactif PHPMailer.

    Une fois que votre visiteur aura soumis un message, il recevra un message de confirmation, et le contenu arrivera dans la boîte de réception de l’email que vous avez entré ici :

    $mail->addAddress('exemple@gmail.com', 'Nom du destinataire');
    

    CONSEIL : Si le formulaire de contact de PHPMailer ne fonctionne pas, ajoutez la ligne $mail->SMTPDebug = 2; pour voir ce qui cause le problème. N’oubliez pas de l’effacer ou de changer le 2 en 0 une fois que vous avez terminé.

    PHPMailer propose d’autres exemples que vous pouvez essayer dans leur dépôt officiel GitHub. De plus, si vous utilisez WordPress, vous pouvez facilement créer un formulaire de contact à l’aide des plugins tels que WP Forms, Formidable Forms ou Gravity Forms.

    Page d'accueil de WP Forms.

    Dépannage des erreurs courantes de PHP Mail et PHPMailer

    Les erreurs peuvent se produire de temps en temps lors de l’utilisation de PHP mail ou PHPMailer. Voici une liste des problèmes les plus courants et des moyens de les résoudre.

    Adresse de l’expéditeur rejetée : N’appartient pas à l’utilisateur

    Cette erreur signifie que le serveur n’a pas pu s’authentifier à l’aide des informations fournies.

    Pour la corriger, vérifiez l’adresse email que vous avez utilisée pour envoyer le message et assurez-vous qu’elle correspond à une boîte email existante. Si elle pointe vers une mauvaise boîte de réception, modifiez-la en conséquence. Vérifiez également que vous avez activé votre enregistrement SPF.

    Gmail n’a pas pu vérifier que VotreDomaine.com a envoyé ce message

    Si vous voyez cet avertissement lorsque vous testez un script PHP mail, cela peut signifier l’une des choses suivantes :

    • Votre enregistrement SPF n’est pas activé. Vous pouvez trouver les étapes pour en ajouter un ici.
    • Vous avez envoyé un email à partir d’une adresse qui n’existe pas ou qui ne vous appartient pas. Veillez à utiliser des données d’authentification SMTP valides.

    Votre email arrive dans le dossier Spam

    Il y a plusieurs raisons pour lesquelles un message PHP peut se transformer en spam. Voici quelques-unes des plus courantes :

    • Un sujet mensonger ou similaire au spam. Quelques exemples : “test” ou “testing“, “bonjour“, “urgent” ou tout autre terme similaire. Veillez à ce que l’objet de votre message soit clair.
    • Vous utilisez une adresse d’expéditeur incorrecte qui invoque les mesures de sécurité pour filtrer votre email. Cette mesure vise à prévenir l’usurpation d’identité par email et les arnaques.
    • Vous utilisez des mots déclencheurs de spam. Cette catégorie comprend des expressions telles que “offre exceptionnelle” “cliquez ici” “promotion spéciale” “ce n’est pas du spam“, etc. Essayez de modifier le contenu de votre message pour voir si c’est le cas.
    • Votre liste de diffusion n’a pas de bouton de désinscription. Lorsque de nombreuses personnes signalent vos emails comme étant des spams, vous aurez du mal à éviter le filtre anti-spam. Un bouton de désabonnement est un excellent moyen d’éviter cela et de gagner la confiance de vos lecteurs.

    Conclusion

    Félicitations, vous êtes maintenant familiarisé avec la fonction d’envoi d’email de PHP et avec l’utilisation de PHPMailer pour envoyer des mails avec une authentification SMTP. Bien que ce tutoriel fournisse des exemples de base, la même syntaxe peut être utilisée pour développer un formulaire de contact ou d’autres extensions pour votre site web.

    Pour des informations plus approfondies, n’oubliez pas de consulter la page du projet PHPMailer. Si vous avez des conseils, des astuces ou des idées à partager, nous sommes impatients de les entendre dans la section des commentaires ci-dessous.

    Author
    L'auteur

    Ismail

    Ismail est un spécialiste du référencement et de la localisation chez Hostinger. Il est passionné par la technologie et le développement web et possède des années d'expérience dans le domaine informatique. Ses passe-temps incluent les jeux vidéo et le football.