Hola a todos, hoy os voy a explicar como podemos enviar un correo en PHP con PHPMailer y Mailtrap.
Algo importante en aplicaciones webs es poder enviar correos, con PHP se puede hacer con la función mail, pero es algo limitada, por lo que os recomiendo usar la clase PHPMailer.
Lo primero es descargar PHPMailer desde su github. Lo puedes hacer aquí
Recuerda descargarlo en el botón verde «clone or download»
Cuando lo tengas descargado, copiate en tu proyecto los ficheros de la carpeta src, la clase Exception no es necesaria.
Otra cosa que necesitamos es hacernos una cuenta en mailtrap que nos permite simular un servidor de correo, esto viene muy a nivel de desarrollo con localhost.
Os recomiendo guardar en una carpeta llamada libs, las clases de PHPMailer.
Vamos a crear un pequeño formulario para enviar el correo:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ejemplo enviar correo</title> </head> <body> <form action="enviar-mail.php" method="POST"> <div> <label for="subject">Asunto</label> <input type="text" name="subject" id="subject" /> </div> <div> <label for="message">Mensaje</label> <textarea name="message" id="message" cols="30" rows="10"></textarea> </div> <div> <input type="submit" value="Enviar"> </div> </form> </body> </html>
Importamos todas las clases de PHPMailer:
use PHPMailer\PHPMailer\PHPMailer; require_once('./libs/SMTP.php'); require_once('./libs/POP3.php'); require_once('./libs/OAuth.php'); require_once('./libs/PHPMailer.php');
El use se usa ya que PHPMailer, tiene un namespace y se debe importar de esa forma.
Ahora vamos a crear unas cuantas constantes:
// Constantes para la configuracion define("EMAIL_HOST", "smtp.mailtrap.io"); define("EMAIL_USERNAME", "8aba630f0ba7e7"); define("EMAIL_PASS", "407377b27bbf2c"); define("EMAIL_SMTPSECURE", "tls"); define("EMAIL_PORT", 2525); define("EMAIL_ADMIN", 'ddr-288a24@inbox.mailtrap.io');
La mayoría las puedes sacar de mailtrap:
Obtenemos los valores:
$subject = $_POST['subject']; $message = $_POST['message'];
Ahora creamos el objeto PHPMailer, lo encerramos en un try catch para ver los errores en caso de error.
try { // Creamos el objeto PHPMailer $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; } catch (Exception $e) { echo "Error: {$e->ErrorInfo}"; }
Ahora metemos la configuración:
try { // Creamos el objeto PHPMailer $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; // Configuracion del servidor (obtenido de mailtrap) $mail->Host = EMAIL_HOST; $mail->Username = EMAIL_USERNAME; $mail->Password = EMAIL_PASS; $mail->SMTPSecure = EMAIL_SMTPSECURE; $mail->Port = EMAIL_PORT; } catch (Exception $e) { echo "Error: {$e->ErrorInfo}"; }
Ahora vamos a indicar el origen, el correo donde se mandará, el asunto, el mensaje y si le quiero meter etiquetas HTML:
try { // Creamos el objeto PHPMailer $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; // Configuracion del servidor (obtenido de mailtrap) $mail->Host = EMAIL_HOST; $mail->Username = EMAIL_USERNAME; $mail->Password = EMAIL_PASS; $mail->SMTPSecure = EMAIL_SMTPSECURE; $mail->Port = EMAIL_PORT; // Indicamos el origen del correo $mail->setFrom(EMAIL_ADMIN); // Añadimos el destinatario (ahora mismo solo irá a mailtrap) $mail->addAddress("administrador@discoduroderoer.es"); // Indicamos el asuento $mail->Subject = $subject; // Indicamos que puede contener codigo html $mail->isHTML(true); // Mensaje del email $mail->Body = $message; } catch (Exception $e) { echo "Error: {$e->ErrorInfo}"; }
Y por fin, vamos a enviar el correo, nos indica si ha ido bien o no:
try { // Creamos el objeto PHPMailer $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; // Configuracion del servidor (obtenido de mailtrap) $mail->Host = EMAIL_HOST; $mail->Username = EMAIL_USERNAME; $mail->Password = EMAIL_PASS; $mail->SMTPSecure = EMAIL_SMTPSECURE; $mail->Port = EMAIL_PORT; // Indicamos el origen del correo $mail->setFrom(EMAIL_ADMIN); // Añadimos el destinatario (ahora mismo solo irá a mailtrap) $mail->addAddress("administrador@discoduroderoer.es"); // Indicamos el asuento $mail->Subject = $subject; // Indicamos que puede contener codigo html $mail->isHTML(true); // Mensaje del email $mail->Body = $message; // Enviamos el email, nos indicará si se envio o no if ($mail->send()) { echo "Se ha enviado el correo correctamente"; } else { echo "No se ha enviado el correo correctamente"; } } catch (Exception $e) { echo "Error: {$e->ErrorInfo}"; }
Aquí os dejo el ejemplo completo:
index.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ejemplo enviar correo</title> </head> <body> <form action="enviar-mail.php" method="POST"> <div> <label for="subject">Asunto</label> <input type="text" name="subject" id="subject" /> </div> <div> <label for="message">Mensaje</label> <textarea name="message" id="message" cols="30" rows="10"></textarea> </div> <div> <input type="submit" value="Enviar"> </div> </form> </body> </html>
enviar-mail.php
<?php // importamos todo lo necesario use PHPMailer\PHPMailer\PHPMailer; require_once('./libs/SMTP.php'); require_once('./libs/POP3.php'); require_once('./libs/OAuth.php'); require_once('./libs/PHPMailer.php'); // Constantes para la configuracion define("EMAIL_HOST", "smtp.mailtrap.io"); define("EMAIL_USERNAME", "8aba630f0ba7e7"); define("EMAIL_PASS", "407377b27bbf2c"); define("EMAIL_SMTPSECURE", "tls"); define("EMAIL_PORT", 2525); define("EMAIL_ADMIN", 'ddr-288a24@inbox.mailtrap.io'); // Obtenmos los valores del formularios $subject = $_POST['subject']; $message = $_POST['message']; try { // Creamos el objeto PHPMailer $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; // Configuracion del servidor (obtenido de mailtrap) $mail->Host = EMAIL_HOST; $mail->Username = EMAIL_USERNAME; $mail->Password = EMAIL_PASS; $mail->SMTPSecure = EMAIL_SMTPSECURE; $mail->Port = EMAIL_PORT; // Indicamos el origen del correo $mail->setFrom(EMAIL_ADMIN); // Añadimos el destinatario (ahora mismo solo irá a mailtrap) $mail->addAddress("administrador@discoduroderoer.es"); // Indicamos el asuento $mail->Subject = $subject; // Indicamos que puede contener codigo html $mail->isHTML(true); // Mensaje del email $mail->Body = $message; // Enviamos el email, nos indicará si se envio o no if ($mail->send()) { echo "Se ha enviado el correo correctamente"; } else { echo "No se ha enviado el correo correctamente"; } } catch (Exception $e) { echo "Error: {$e->ErrorInfo}"; }
Puedes descargar aquí todo el ejemplo.
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta