«

»

Oct 23

Yii1- Envoyer un mail avec PHPMailer et YiiFramework

Pour envoyer un mail, nous allons utiliser l’extension PHPMailer. PHPMailer est une librairie qui permet d’envoyer ou de consulter des mails. Pour cela, nous allons l’utiliser comme une extension dans Yii.

PHPMailer

Installation de l’extension PHPMailer

Tout d’abord, vous allez télécharger la dernière version ici

Une fois télécharger, vous allez extraire le fichier dans le répertoire suivant de votre projet « protected/extension »

Vous obtenez l’arborescence suivante :

CapturePhpMailer1Avec les fichier suivant dans le répertoire principal de phpmailer :
CapturePhpMailer2

Appel depuis Yii

L’appel directement à la bibliothèque ne fonctionne pas car Yii considère les points comme une séparation de répertoire (une arborescence). Le fichier étant « class.phpmailer.php », Yii recherchera phpmailer.php dans le répertoire class. Pour cela, nous allons créer un objet intermédiaire qui héritera de class.phpmailer.php.

Nous appelerons ce fichier YiiPhpMailer et aura le contenu suivant

 
require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'class.phpmailer.php';
 
class YiiPhpMailer extends PHPMailer
{
}

Le contrôleur dans YiiFramework

La fonction d’envoi de mail

Dans l’exemple ci-dessous, nous allons envoyer un mail à partir d’une boite mail GMail.

 

La fonction suivante devra être codé au niveau de votre contrôleur.

public function sendMail() {
     Yii::import('application.extensions.phpmailer.YiiPhpMailer');
     $mailer = new YiiPhpMailer;
     $mailer->IsSMTP();
     $mailer->IsHTML(true);
     $mailer->SMTPAuth = true;
     $mailer->SMTPSecure = "ssl";
     $mailer->Host = "smtp.gmail.com";     
     $mailer->Port = 465;
 
     $mailer->Username = 'Votreadresse@gmail.com';
     $mailer->Password = 'VotreMotdePasseGmail';
     $mailer->From = "Votreadresse@gmail.com";
     $mailer->FromName = "Test";
     $mailer->AddAddress("destinataire@xxx.com");
     $mailer->Subject = "Mettre ici l'objet de votre mail";
     $mailer->Body = "Bonjour, ceci est un test d'envoi d'un mail à partir de PHP Mailer et du framework Yii.";
     if($mailer->Send()) {
          echo "Le mail a été envoyé avec succès.";
     }
     else {
          echo "Une erreur est survenue, le mail n'a pas été envoyé : " . $mailer->ErrorInfo;;
     }
     $mailer->SmtpClose();
     unset($mailer);
 
}

 

L’appel depuis votre contrôleur

Vous n’avez plus qu’à faire appel à cette fonction depuis n’importe quelle action de votre contrôleur

	public function actionContact()
	{
          ...
          $this->sendMail();
        }

SMTP Error: Could not connect to SMTP host

Si vous rencontrez cette erreur : « SMTP Error: Could not connect to SMTP host »

Vérifier que vous avez activé sur votre serveur Web l’extension « openssl ».
Pour cela, ouvrez le fichier php.ini de votre serveur PHP
Puis supprimer le « ; » (point-virgule) en début de ligne

;extension=php_openssl.dll

devient

extension=php_openssl.dll

Ensuite, arrêter et relancer votre serveur Web.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>