Enviar correo en PHP con PHPMailer y Mailtrap

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-&gt;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.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *