Comment envoyer un mail en php

Publié le : 14-01-2019 20:20

Introduction

L'envoi d'email en PHP se fait traditionnellement par la fonction mail() le fait est à l'usage que cette fonction cause plusieurs problèmes principalement qu'il n'est pas possible de s'identifier au prêt d'un serveur SMTP. L'envoi s'effectuant de manière anonyme, et le mail arrivant très souvent dans les spams.

Pour cette raison une bibliothèque open source existe PhpMailer.

Déployer PhpMailer sur un projet

Pour intégrer PhpMailer à un projet il faut suivre les étapes suivantes :

  1. Télécharger la source
  2. Déziper l'archive
  3. Copier le dossier dans l'arborescence de votre projet à l'emplacement de votre choix
  4. Inclure dans le code PHP les dépendances minimales
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';

Préparer un email

Pour paramétrer un email il convient de précisier le serveur SMTP,le port du serveur, le protocole de sécuriter à utiliser, l'adresse email et le mot de passe à utiliser.

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = 'ssl0.ovh.net';               //Adresse IP ou DNS du serveur SMTP
$mail->Port = 465;                          //Port TCP du serveur SMTP
$mail->SMTPAuth = 1;                        //Utiliser l'identification

if($mail->SMTPAuth){
   $mail->SMTPSecure = 'ssl';               //Protocole de sécurisation des échanges avec le SMTP
   $mail->Username   =  'login@host.net';   //Adresse email à utiliser
   $mail->Password   =  'password';         //Mot de passe de l'adresse email à utiliser
}



Ajouter du contenu HTML et TEXT

$mail->CharSet	  = ENCODE_UTF8;                       //Format d'encodage à utiliser pour les caractères
$mail->From       =  'contact@host.net;                //L'email à afficher pour l'envoi
$mail->FromName   = 'Contact de host.net';             //L'alias à afficher pour l'envoi
$mail->Subject    =  'Mon sujet';                      //Le sujet du mail
$mail->WordWrap   = 50; 			                   //Nombre de caracteres pour le retour a la ligne automatique
$mail->AltBody = 'Mon message en texte brut'; 	       //Texte brut
$mail->IsHTML(false);                                  //Préciser qu'il faut utiliser le texte brut

if($in_Html_Body != null){
   $mail->MsgHTML($in_Html_Body); 		                //Le contenu au format HTML
   $mail->IsHTML(true);
}

Ajouter un utilisateur (sans alias)

$mail->AddAddress('johndoe@ovh.net');
$mail->AddAddress('papyquebec@ovh.net');

Ajouter un utilisateur (avec un alias)

$mail->AddAddress('johndoe@ovh.net','John Doe');
$mail->AddAddress('papyquebec@ovh.net','Papy Quebec');

Ajouter un utilisateur en CCI/BBC (Copie conforme invisible)

$mail->addBCC('hollow_man@ovh.net','Sebastian Caine');

Ajouter une pièce jointe

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

Envoyer l'email

$mail->Send();