Module de mail
Note
Le module Mailer n’est pas installé par défaut. Il utilise phpmailer pour envoyer du courrier.
Installation
Dans la racine de votre projet :
composer require phpmv/ubiquity-mailer
Mailer configuration
Le fichier de configuration de la messagerie est situé dans app/config/mailer.php
.
Exemple de configuration pour un envoi depuis google mail :
<?php
return array(
"host" => "smtp.gmail.com",
"port" => 587,
"auth" => true,
"user" => "********@gmail.com",
"password" => "*******",
"protocol" => "smtp",
"ns" => "mail",
"from" => array(
"address" => "***********@gmail.com",
"name" => "******"
),
//Unsecure configuration: only for testing from a local server
"SMTPOptions" => array(
"ssl" => array(
"verify_peer" => false,
"verify_peer_name" => false,
"allow_self_signed" => true
)
),
"CharSet" => "utf-8"
);
Création d’une classe Mailer
Une classe Mailer est utilisée pour préparer l’envoi d’un courrier, dont l’élaboration peut utiliser les mêmes fonctionnalités que l’action d’un contrôleur.
Avec les devtools :
Ubiquity newMail InformationMail
Avec les webtools :
- Dans la partie mailer :
Cliquer sur le bouton Add mailer class
Entrer les valeurs suivantes
La classe est générée par défaut dans le dossier app/mail (le namespace mail est défini par défaut dans le fichier de configuration).
<?php
namespace mail;
use Ubiquity\mailer\MailerManager;
/**
* Mailer InformationMail
**/
class InformationMail extends \Ubiquity\mailer\AbstractMail {
/**
*
* {@inheritdoc}
* @see \Ubiquity\mailer\AbstractMail::bodyText()
*/
public function bodyText() {
return 'Message text';
}
/**
*
* {@inheritdoc}
* @see \Ubiquity\mailer\AbstractMail::initialize()
*/
protected function initialize(){
$this->subject = 'Message title';
$this->from(MailerManager::loadConfig()['from']??'from@organization');
//$this->to($to);
}
/**
*
* {@inheritdoc}
* @see \Ubiquity\mailer\AbstractMail::body()
*/
public function body() {
return '<h1>Message body</h1>';
}
}
Exemple : Un courriel envoyé à tous les utilisateurs de la base de données :
namespace mail;
use Ubiquity\mailer\AbstractMail;
use Ubiquity\orm\DAO;
use models\User;
class InformationMail extends AbstractMail {
protected function initialize() {
$this->subject = 'Message test';
$this->from("myaddressmail@gmail.com", 'jcheron');
$this->to(DAO::getAll(User::class, '', false));
$this->attachFile('afile.pdf');
}
public function body() {
$date = (new \DateTime())->format('c');
$user = DAO::getOne(User::class, 1);
$body = '<h2>Message</h2><div>Message content</div>';
$content = $this->loadView('mailer/AllUsers.html', \compact('date', 'user', 'body'));
return $content;
}
public function bodyText() {
return 'This message has a text version';
}
}
initialize()
est automatiquement invoqué lors de la construction et permet de définir les attributs du courrier (destinataires, sujet…).body()
etbodyText()
sont utilisées pour construire le corps. Ces méthodes doivent retourner une chaîne de caractères, et elles peuvent charger des vues.
Ce message sera visible dans la section Mailer des webtools :