Hoy vamos a ver como enviar correos con Swiftmailer una librería PHP desarrollada por SensioLabs, el equipo que mantiene proyectos como Symfony y Twig.
Utilizaremos el SMTP de Gmail para enviar el email desde localhost, esto funcionará también si tenemos la web subida a un servidor remoto. Haremos el típico formulario de contacto.
Podemos descargar Swiftmailer desde su web oficial.
index.php
<!DOCTYPE HTML> <html lang="es"> <head> <meta charset="UTF-8"/> <title>Enviar correos con Swiftmailer</title> </head> <body> <h2>Contacto</h2> <form action="enviar.php" method="post"> Correo electronico: <br/> <input type="email" name="email" /><br/> Asunto: <br/> <input type="text" name="asunto" /><br/> Mensaje:<br/> <textarea name="mensaje"></textarea><br/> <input type="submit" name="submit" value="Enviar"/> </form> </body> </html>
enviar.php
<?php if(isset($_POST["submit"])){ //Incluimos swiftmailer require_once '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 de nuestro correo'); // 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($_POST["asunto"]) // Podemos tener un cuerpo del mensaje en texto plano //->setBody($_POST["mensaje"]) // Escribimos el mensaje en html ->addPart('<h1>Mensaje enviado con Swiftmailer - Victor Robles</h1> <p>Email: '.$_POST["email"].'</p> <p>Mensaje: '.$_POST["mensaje"].'</p>', 'text/html') // Indicamos que el mensaje llega desde nuestra cuenta de correo ->setFrom("correo@gmail.com", "Correo con Swiftmailer") // Añadimos un archivo adjunto ->attach(Swift_Attachment::fromPath("swiftmailer.png")); // Enviamos el email $mailer = Swift_Mailer::newInstance($transport); $mailer->send($message); echo "Correo enviado correctamente<br/>"; echo "<a href='index.php'>Volver</a>"; }else{ header("Location:index.php"); } ?>