Para implementar la posibilidad de enviar emails desde phalcon vamos a utilizar la libreria de phpmailer y a seguir estos sencillos pasos.
Instalamos la librería descargada en nuestra carpeta library, siplemente copiamos y pegamos.
En nuestro services.php setearemos nuestra nueva librería, primero llamándola y luego inyectándola.
use Salamandra\PHPMailer\Email
$di->set('Email', function () {
return new Email();
});
En el archivo Email.php tenemos la posibilidad de enviar el correo cifrado haciendo uso de username y password, pero eso lo vamos a obviar para hacer solo uso de algún servidor de email para enviar los correos en local, por ejemplo: postfix.
Quedándo la configuración de tal manera:
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->From = $this->FromEmail;
$mail->Sender = $this->FromEmail;
$mail->FromName = $this->FromTitle;
$body = $this->getTemplate($name, $params);
//$mail->SMTPSecure = "ssl";
//$mail->Host = $this->Hostname;
//$mail->SMTPAuth = true;
//$mail->Username = $this->Username;
//$mail->Password = $this->Password;
//$mail->Port = $this->Port;
//$mail->WordWrap = 50;
$mail->IsHTML(true); //
$mail->Subject = $subject;
Lo lógico es tener un layout para el email y una vista que es dónde escupiremos las variables que pasemos. La función getTemplate que está en class del mailing es la encargada de renderizar la view.
public function getTemplate($name, $params)
{
$view = new View();
return $view->getRender(
'emailTemplates',
$name,
$params,
function ($view) {
// Set any extra options here
$view->setViewsDir('../app/views/');
$view->setLayout('emailTemplates');
$view->setRenderLevel(
View::LEVEL_LAYOUT
);
}
);
}
Así que en la ruta /views/layouts creamos el layout emailTemplates.phtml con un código básico.
<html>
<head></head>
<body style="background-color: #E4E4E4;padding: 20px; margin: 0; min-width: 640px;">
<table border="0" cellspacing="0" width="530" style="color:#262626;background-color:#fff;
padding:27px 30px 20px 30px;margin:auto; border:1px solid #e1e1e1;">
<tbody>
<!-- header -->
<tr style="background:#D44413">
<td style="padding-left:20px">
<a target="_blank" style="text-decoration:none;color:inherit;font-family:'HelveticaNeue','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:normal;">
<h1 style="color:#fff">Mi site</h1>
</a>
</td>
</tr>
</tbody>
</table>
<?php echo $this->getContent(); ?>
</body>
</html>
Gracias a la llamada a $this->getContent(); de phalconphp, podremos enviar una parte de un view con algún parámetro.
Para ello creamos en view una carpeta llamada como el layout, emailTemplates y dentro un archivo llamado contacto.phtml que tendrá el contenido que queremos con alguna variable que habremos pasado en la llamada a la librería que veremos ahora.
contacto.phtml
<p>Hola <?php echo $nombre . ' ' . $apellidos; ?></p>
Ahora solo nos queda mandar el correo, siempre con nuestro postfix o similar activado para poder enviar los correos. Desde nuestro controller que queramos enviar el correo:
$params['nombre'] = 'David';
$params['apellidos'] = 'Carretero';
$this->Email->sendEmail('email@email.com', 'Contacto de un usuario', 'contacto', $params)
Y con estos pasos ya podemos enviar emails y tener nuestras plantillas organizadas con layouts y views.