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.