Personalmente me gusta mucho Swiftmailer para enviar correos, así que veremos como enviar correos con Swiftmailer desde Zend Framework 2.
Primero descargamos Swiftmailer y lo descomprimimos dentro del directorio vendor/.
Incluimos la librería en el fichero Composer.json:
{ "name": "zendframework/skeleton-application", "description": "Skeleton Application for ZF2", "license": "BSD-3-Clause", "keywords": [ "framework", "zf2" ], "homepage": "http://framework.zend.com/", "require": { "php": ">=5.3.2", "zendframework/zendframework": "2.2.*" }, "autoload":{ "classmap": ["vendor/librerias/"], "files": ["vendor/Swift-5.0.3/lib/swift_required.php"] } }
En este caso en lugar de cargar todas las clases de un directorio solo cargamos la requerida para evitar conflictos.
Ojo, tener todas las librerías contenidas en el mismo directorio puede dar problemas actualmente, lo mejor es tener separadas en directorios diferentes todas las librerías.
En un método de un controlador:
public function enviarAction(){ // Podemos incluir la libreria de esta forma // require_once './vendor/librerias/Swift-5.0.3/lib/swift_required.php'; /* * Creamos la instancia para el transporte SMTP * le indicamos el servidor smtp a utilizar y el puerto * le indicamos el usuario y la contraseña * de nuestra cuenta de correo */ $transport= \Swift_SmtpTransport::newInstance('smtp.gmail.com', 587) ->setUsername('correo@gmail.com') ->setPassword('contraseña'); // Creamos el mensaje $message = \Swift_Message::newInstance() //Al ser un formulario de contacto nos lo enviamos a nosotros mismos ->setTo(array( "correo@gmail.com" => "Contacto Victor Robles", )) // Definimos el asunto ->setSubject("Pruebas") // Escribimos el mensaje en html ->addPart('<h1>Mensaje enviado con Swiftmailer - Victor Robles</h1>', 'text/html') // Indicamos que el mensaje llega desde nuestra cuenta de correo ->setFrom("correo@gmail.com", "Correo con Swiftmailer") // Añadimos un archivo adjunto que esta el directorio public ->attach(\Swift_Attachment::fromPath("public/img/zf2-logo.png")); // Enviamos el email $mailer = \Swift_Mailer::newInstance($transport); $mailer->send($message); return $this->redirect()->toRoute("usuarios"); }
Cuando utilicemos este método action nos llegará un email formateado en HTML y con una imagen adjunta.
Más información:
Enviar correos con Swiftmailer