Envoyer un email avec PHP

Envoyer un email avec PHP

Envoyer un email avec PHP via un formulaire de contact ou pour vous avertir de la validation d’une inscription est courant dans le web. Mais quels services utilisé face à la multitude de bibliothèques disponibles sur la toile ? Voilà ma méthode et le choix de mon outil.

La méthode

Dans tous les cas auxquels j’ai dû faire face, un email envoyé depuis un site web est le résultat d’un formulaire. En effet, le contenu de l’email résume la plupart du temps des données récoltées par consentement d’un internaute.
Ou dans d’autres cas, j’avertis le prestataire du site, qu’une nouvelle inscription a été réalisée en base de données.

Concrètement, j’utilise Javascript et Ajax pour empêcher l’envoie par défaut du formulaire en HTML, pour dans un premier temps ; vérifier les données envoyées, éventuellement les traiter en base de données et pour finalement envoyer un email.

AJAX ?

AJAX est l’acronyme de Asynchronous JavaScript and XML. Je ne vous ferai pas un cours sur l’AJAX, car ce n’est pas le but de ce blog et je dois sans doute utiliser 10% de cette technologie. Mais retenez que l’utilisation de cette technique vous permet d’envoyer des requêtes à votre serveur web sans pour autant changer ou rafraichir la page. Le but est double ; à la fois, j’évite un rafraichissement de la page, ce qui est quand même plus classe, … Mais aussi, je sépare le travail dans un autre fichier PHP, qui quant à lui s’occupera de parler à la base de données et d’envoyer l’email.

Je sépare les technologies pas seulement pour que cela soit plus clair mais parce que chacune d’entre elles est à même d’exécuter les tâches qui finiront par obtenir le résultat que je souhaite ; envoyer mon email.

L’outil d’envoie d’email

Il existe plusieurs méthode pour envoyer un email avec PHP. Pour ma part, j’ai déjà testé sendinblue, mailchimp ou encore benchmark. Mais celui que j’utilise couramment est PhpMailer.

À défaut des autres précités, PhpMailer n’est pas une API mais plutôt une bibliothèque que vous pouvez télécharger et lier à votre site (à l’aide de composer par exemple). Comme j’utilise mes propres base de données et mes propres templates d’Emailings, l’outil reste suffisant. Mais c’est sûr que des outils comme MailChimp (dont je vous ai déjà parlé ici) est vraiment un outil super si vous voulez rassembler à la fois vos abonnés, la gestion de vos templates et en analyser les statistiques.

Le code

Comme pour la fonction mail() native de PHP, PhpMailer a besoin de 5 éléments pour fonctionner, c’est ainsi que je structure ma méthode :

  1. Initiation – obligatoire
    Sans quoi l’outil ne fonctionnerait pas, on appelle à ce stade les différentes classes PHP dont l’outil a besoin pour fonctionner.
    C’est également dans cette partie que vous pouvez éditer la configuration SMTP que vous pouvez demander à votre hébergeur.
  2. Un envoyeur – obligatoire.
    Il est préférable que l’adresse email d’envoi, soit lié au nom de domaine du site duquel l’Emailing s’enverra ; au risque de tomber dans les spams. Par exemple : sur https://lintermedaire.be, l’email s’envoie depuis l’adresse inf@lintermediaire.be.
  3. Un récepteur | obligatoire
    Là aussi, c’est obligatoire évidement. Renseigné l’adresse email mais aussi le nom de la personne pour éviter également de tomber dans le dossier des indésirables. Il est également possible d’ajouter des personnes en copie ou en copie cachée.
  4. Un sujet | obligatoire
    Là aussi, c’est obligatoire, pour les mêmes raisons citées ci-dessus.
  5. Un contenu| obligatoire
    Eh oui, ce sera dommage dans ce cas ! Ici, et c’est le cas des autres développeurs je pense, le contenu de l’Emailing est renfermé dans une seule variable que j’appelle via la fonction include de PHP (en effet, les templates Emailings font bien souvent une centaine de ligne !)

Voilà à quoi cela ressemble très concrètement :

/* 0 - il faudra appeler votre module au préalable bien évidement */
/* Ainsi que votre template emailing */
try {
  /* 1 */
  $send_mail->CharSet = 'UTF-8';
  $send_mail->isSMTP();
  $send_mail->Host       = 'ssl0.ovh.net';
  $send_mail->SMTPAuth   = true;
  $send_mail->Username   = 'expediteur@nomdedomaine.be';
  $send_mail->Password   = 'motdepassedeladresseemailexpediteur@nomdedomaine.be';
  $send_mail->SMTPSecure = 'ssl';
  $send_mail->Port       = 465;
  /*En local :*/
  if ($_SERVER['SERVER_NAME'] === "localhost") {
            $send_mail->smtpConnect(
                array(
                    "ssl" => array(
                        "verify_peer" => false,
                        "verify_peer_name" => false,
                        "allow_self_signed" => true
                    )
                )
            );
        }
  /* 2 */
  $send_mail->setFrom('expediteur@nomdedomaine.be', 'Nom de Domaine');
  /* 3 */
  $send_mail->addAddress('recepteur@gmail.com', 'Nom du récepteur');
  $send_mail->addCC('copie@gmail.com', 'Nom du récepteur');
  $send_mail->addBCC('copie_cache@gmail.com', 'Nom du récepteur');
  $send_mail->isHTML(true);
  /* 4 */
  $send_mail->Subject = 'Ceci est un super sujet';
  /* 5 */
  $send_mail->Body = $template_emailing;
  $send_mail->AltBody = 'TEXTE si pas de prise en compte l\'html';
  /* ENVOI  de l'email */
  $send_mail->send();
} catch (Exception $e) {
  /* AFFICHE LES ERREURS SI C'EST LE CAS*/
  echo $e;
  exit();
}

Et voilà.

Bien sûr vous trouverez toute la doc sur le dépôt GIT du projet et toutes les options possibles (par exemple de joindre un fichier, ou de rendre le tout encore plus sécurisé …)

Bonne réception !

Newsletter