Accueil » PHP Envoyer des mails

PHP Envoyer des mails

Avec le langage de programmation PHP il est par défaut possible d’envoyé des mails mais la fonctionnalité étant très limitée, un bibliothèque appelée PHPMailer permet d’envoyer des emails avec plus de fonctionnalités. Dans cette procédure, je vais vous expliquer comment envoyer des emails avec le langage de programmation PHP et la librairie PHPMailer ainsi qu’une fonction PHP.

Logo PHPMailer - PHP Envoyer des mails

Prérequis :

Envoyer des mails avec PHP :

Pour envoyer des emails, nous allons utiliser la bibliothèque PHPMailer (Dépot Github) et nous allons utiliser un serveur SMTP. Il est possible d’utiliser la fonction mail de PHP mais celle-ci nous limitera dans les fonctionnalités.

Avant de débuter, assurez-vous d’avoir intégrer composer à votre application pour ensuite continuer de suivre la procédure.

Nous allons tous d’abord importer PHPMailer dans l’application avec la commande :

composer require phpmailer/phpmailer

Une fois que PHPMailer est intégré dans votre projet, vous allez pouvoir utiliser la classe PHPMailer à l’aide de la fonction suivante :

require './vendor/autoload.php';

use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\PHPMailer;

// Configuration des informations SMTP
define("SMTP_HOST", "votre-hote");
define("SMTP_PORT", xxx);
define("SMTP_SECURE", true);
define("SMTP_AUTH", true);
define("SMTP_SENDER", "exemple@votre-domaine.fr");
define("SMTP_USER", "exemple@votre-domaine.fr");
define("SMTP_PASS", "M0t d3 Passe FoRt !");

/**
     * Envoie un mail
     *
     * @param string $destinataire
     * @param string $sujet
     * @param string $mail_body_format_html
     * @param string $alt_message
     * @return void
     */
    function sendMail(string $destinataire, string $sujet, string $mail_body_format_html, string $alt_message="" ):void
    {
        try {
           $mail = new PHPMailer(true);
           //Server settings
           $mail->SMTPDebug = SMTP::DEBUG_OFF;                         // Activer l'option de d'affichage de debug : SMTP::DEBUG_SERVER;
           $mail->isSMTP();                                                                          // Configuration de la méthode d'envoie en SMTP
           $mail->Host       = SMTP_HOST;                                               // Configuration de l'hote du serveur SMTP
           $mail->SMTPAuth   = SMTP_AUTH;                                       // Configuration de l'authentification SMTP
           if(SMTP_AUTH){
               $mail->Username   = SMTP_USER;                                    // Configuration de l'utilisateur SMTP
               $mail->Password   = SMTP_PASS;                                     // Configuration du mot de passe SMTP
           }
           if(SMTP_SECURE) {
               $mail->SMTPSecure = "ssl";                                              // Configuration du chiffrement SSL SMTP
           }
           $mail->Port       = SMTP_PORT;                                            // Configuration du port du serveur SMTP
    
           $mail->setFrom(SMTP_SENDER, 'Surnom');                // Ajout de l'expéditeur
           $mail->addAddress($destinataire);                                  // Ajout d'un destinataire
           // Contenu
           $mail->CharSet = 'UTF-8';                                                    // Configuration de l'encodage en UTF-8
           $mail->isHTML(true);                                                           // Configuration du mail au format HTML
           $mail->Subject = $sujet;                                                     // Configuration du sujet du mail
           $mail->Body    = $mail_body_format_html;                 // Configuration du contenu du mail
           if(!empty($alt_message)){
               $mail->AltBody = $alt_message;
            }else {
                $mail->AltBody = 'Si ce mail ne s\'affiche pas correctement, veuillez utiliser un client mail/navigateur plus récent.';
            }
    
           $mail->send();
           echo 'Le mail a été envoyé !';
        } catch (Exception $e) {
            if(isset($mail)){
                echo "Le mail n'a pas pu être envoyé. Erreur : {$mail->ErrorInfo}";
            } else {
                echo "Le mail n'a pas pu être envoyé. Erreur : {$e->getMessage()}";
            }
        }
    }


sendMail("test@test.com", "Mail de test", "Contenu de test");

Une fois le code suivant configuré avec vos paramètres, vous allez recevoir un mail de votre application.

Note : Si vous ne possédez pas de serveur SMTP, vous pouvez en déployer un rapidement en local avec le mailer suivant : https://mailcatcher.me/
Si vous n’avez pas la possibilité de déployer le mailer mailcatcher, alors vous pouvez utilisé un service comme Gmail.
Toutes les méthodes ne sont pas montrés dans la procédure, donc je vous conseil de consulter la documentation officielle.

Après avoir utilisé la fonction ci dessus, je vous conseil de vous construire une classe qui vous permettra de vous simplifié l’utilisation de la classe PHPMailer.
Ainsi vous aurez la possibilité d’utilisé plus rapidement la fonctionnalité que vous souhaitez.

Sources :

https://packagist.org/packages/phpmailer/phpmailer
https://github.com/PHPMailer/PHPMailer

Susceptible de vous intéresser :