Módulo Mailer

Nota

El módulo Mailer no está instalado por defecto. Utiliza phpmailer para enviar correo.

Instalación

En la raíz de tu proyecto:

composer require phpmv/ubiquity-mailer

Configuración del Mailer

El archivo de configuración del mailer se encuentra en app/config/mailer.php.

Ejemplo de configuración para un envío desde 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"
);

Creación de una clase Mailer

Una clase Mailer se utiliza para preparar el envío de un correo, cuya elaboración puede utilizar las mismas funcionalidades que la acción de un controlador.

Con devtools:

Ubiquity newMail InformationMail

Con webtools:

En la parte de correo:
  • Haga clic en el botón Add mailer class.

  • Introduzca los siguientes valores

../_images/newMail.png

La clase se genera por defecto en la carpeta app/mail (el espacio de nombres mail se define por defecto en el fichero de configuración).

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>';
     }
}

Ejemplo : Un correo electrónico enviado a todos los usuarios de la base de datos :

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() se invoca automáticamente durante la construcción y permite definir los atributos del correo (destinatarios, asunto…).

  • body() y bodyText() se utilizan para construir el cuerpo. Estos métodos deben devolver una cadena y pueden cargar vistas.

Este mensaje será visible en la sección Mailer de las herramientas web:

../_images/mailerClasses.png