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

../_images/newMail.png

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).

app/mail/InformationMail.php
<?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 :

app/mail/InformationMail.php
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() et bodyText() 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 :

../_images/mailerClasses.png