Email

Cómo enviar emails usando PHP mail

enviar-emails-usando-php-mail-y-phpmailer

Introducción

En este tutorial aprenderemos sobre el PHP mail y cómo usarlo. También te mostraremos cómo configurar y usar PHPMailer, una popular biblioteca de envío de correo.

En general, el correo electrónico es una parte integral de cualquier proyecto o negocio. Hoy en día, ser rápido y receptivo es un gran valor, especialmente cuando se trata de responder a tus clientes. En muchos casos, la capacidad de respuesta y la comunicación bien planificada es el factor decisivo que los usuarios toman en consideración al hacer compras.

Aunque existen muchas maneras de enviar correos, veremos específicamente el correo de PHP mail. En esencia, puedes enviar correos electrónicos a través de PHP de dos maneras:

  • mediante la función mail() incorporada en PHP;
  • mediante el uso de una biblioteca de terceros, como PHPMailer con SMTP.

¡Veamos cómo funciona cada una y cómo podemos usarlas para enviar correos electrónicos!

Lo que necesitarás

Antes de comenzar con esta guía, necesitarás lo siguiente:

  • Una cuenta de hosting web;
  • Una cuenta de correo electrónico;
  • La función PHP mail() habilitada;
  • La función SMTP habilitada.
  • Un dominio apuntando a los registros MX de Hostinger

Método 1 – Usar la función PHP mail()

La función mail() en PHP permite enviar correos electrónicos usando un programa local de sendmail. Siempre que llames a la función mail(), esta invoca un programa sendmail local, generalmente configurado por el administrador del sistema. Si tu alojamiento web está en Hostinger, puedes habilitar o deshabilitar esta funcionalidad en la sección Emails-> Control del servicio de correo.

control del servicio de correo

El servicio sendmail está habilitado por defecto. Pero en caso de que no lo esté, puedes hacerlo con solo unos par de clics.

sendmail habilitado

Paso 1 – Crear un archivo de prueba para el correo PHP

Antes que nada, tendremos que crear un archivo para el script de correo PHP. Lo colocaremos en el directorio public_html para que se pueda acceder fácilmente a través del nombre de dominio. Puedes usar el Administrador de archivos o un cliente FTP para esta tarea. Vamos a nombrar el archivo testmail.php.

arcihvo de prueba php mail

Paso 2: Entender el correo de PHP

Ahora conozcamos los componentes de un script básico de PHP mail:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@gmail.com";
    $subject = "Checking PHP mail";
    $message = "PHP mail works just fine";
    $headers = "From:" . $from;
    mail($to,$subject,$message, $headers);
    echo "The email message was sent.";
);

Las primeras dos líneas habilitan el informe de errores. Esto permitirá la ayuda en caso de que el script no se ejecute. El resto de los ingredientes son:

$fromDirección de correo electrónico del remitente. La mayoría de los proveedores de hosting no permiten el uso de direcciones de correo electrónico aleatorias aquí, ya que se puede utilizar para la suplantación de identidad. Debes ingresar una dirección de correo electrónico creada para tu nombre de dominio para poder ejecutar correctamente el correo de PHP.
$toDirección de correo electrónico del destinatario. Como estamos enviando esto a manera de prueba, puede ser un correo electrónico personal.
$subjectEl asunto del mensaje de correo electrónico.
$messageEsta sección es para el contenido del mensaje.
$headersLos encabezados especifican información vital, como la dirección del remitente, la ubicación de respuesta (reply-to) y más.
mail ($to,$subject,$message,$headers)Esta es la función que ejecuta el correo PHP.
echo “El correo PHP fue enviado exitosamente.” Este mensaje aparecerá una vez que se ejecute el script.

Para obtener más información sobre sendmail y sus componentes, puedes consultar la documentación oficial de PHP.

Paso 3 – Ejecutar el script de PHP mail

Si colocaste tu script PHP en el directorio public_html, puedes ejecutarlo accediendo a TuDominio.com/testmail.php. Deberías ver el siguiente mensaje:

prueba-php-mail-exitosa

Aquí hay un ejemplo del correo PHP recibido usando el código anterior:

php-mail-recibido-ejemplo

¡Felicitaciones! Ahora comprendes la sintaxis básica del correo PHP y puedes usarla para enviar mensajes.

Método 2 – Usar PHPMailer

PHPMailer es una popular biblioteca de envío de correo para PHP. Es compatible con el envío de correo a través de la función mail() o SMTP. En resumen, PHPMailer es un método eficaz para enviar emails en un entorno basado en PHP.

Paso 1 – Recolectar detalles para PHPMailer

Para utilizar PHPMailer con el SMTP de Hostinger, primero tendrás que crear una cuenta de correo electrónico. Puedes hacerlo en la sección Cuentas de correo en el panel de hosting web.

crear cuenta de correo en panel de hosting

Cuando hayas terminado, toma tus datos SMTP ubicados en la misma sección:

detalles de correo electronico

Deberías tener cuatro ingredientes por ahora, que son:

  1. Nombre de usuario
  2. Contraseña de cuenta de correo
  3. Host SMTP
  4. Puerto SMTP

Paso 2 – Instalar PHPMailer

Como ya tenemos todos los detalles requeridos, podemos comenzar con la configuración de PHPMailer. Una forma fácil de hacerlo es usando Composer. Está pre-instalado en nuestros planes de hosting compartido, por lo que solo tendrás que conectarte a través de SSH y ejecutar el siguiente comando:

cd public_html

Y luego ejecuta:

composer require phpmailer/phpmailer

Espera un momento a que finalice la instalación y PHPMailer aparecerá en un directorio de proveedores recién creado.

Paso 3 – Entendiendo PHPMailer

Para entender PHPMailer y cómo funciona, investiguemos un ejemplo que usa SMTP para el envío.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'mx1.hostinger.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'test@hostinger-tutorials.com';
$mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
$mail->setFrom('test@hostinger-tutorials.com', 'Your Name');
$mail->addReplyTo('reply-box@hostinger-tutorials.com', 'Your Name');
$mail->addAddress('example@gmail.com', 'Receiver Name');
$mail->Subject = 'PHPMailer SMTP message';
$mail->msgHTML(file_get_contents('message.html'), __DIR__);
$mail->AltBody = 'This is a plain text message body';
$mail->addAttachment('test.txt');
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message sent!';
}

Veamos qué hace cada componente:

use PHPMailer\PHPMailer\PHPMailer;

Esta línea importa la clase PHPMailer al espacio de nombres global.

require ‘../vendor/autoload.php’;

Incluye varias bibliotecas que PHPMailer necesita.

$mail->

Todas estas variables contienen información vital, como detalles del servidor, encabezados, mensajes, archivos adjuntos y más. En resumen, se aseguran de que el remitente sea legítimo con la autenticación SMTP.

if (!$mail->send()) {

Define qué sucede cuando se ejecuta el script.

echo ‘Mailer Error: ‘ . $mail->ErrorInfo;

Si el script no se puede enviar, verás lo que salió mal.

else

Define lo que sucede si el script se ejecuta.

echo ‘Message sent!’;

Este mensaje lo verá el usuario si todo funciona bien.

Tip profesional: la línea SMTPDebug = 2; es útil al probar el script y ver cómo funciona.

Déjalo como SMTPDebug = 0; en la versión final para evitar que el usuario final vea el informe de entrega de SMTP.

Si revisaste todo el código, notarás que estamos haciendo algo un poco diferente que en el primer ejemplo. Estamos enviando un mensaje HTML. Su contenido se tomará del archivo message.html ubicado en el mismo directorio. Esto te permite formatear el texto y proporciona una mayor funcionalidad en comparación con los mensajes de texto sin formato.

Paso 4 – Ejecutar el script de PHPMailer

Vamos a crear un archivo testphpmailer.php y completar todos los campos con los detalles de SMTP que obtuvimos anteriormente. Ejecuta el script ingresando TuDominio.com/testphpmailer.php en el navegador y verás un mensaje similar a este:

phpmailer-prueba-exitosa-1

Este es un ejemplo del mensaje recibido:

phpmailer-smtp-mensaje-de-ejemplo-1

Observa cómo se formateó el texto esta vez, ya que usamos HTML en lugar de texto sin formato. Además, pudimos agregar un archivo adjunto.

Paso 5 – Ejemplo de formulario de contacto de PHPMailer

Puedes utilizar PHPMailer para mucho más que simplemente enviar mensajes simples. Una forma de utilizarlo es crear un formulario de contacto donde tus visitantes o usuarios puedan ponerse en contacto contigo. Aquí hay un ejemplo básico de tal script:

<?php
use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'mx1.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'test@hostinger-tutorials.com';
    $mail->Password = 'EMAIL_ACCOUNT_PASSWORD';
    $mail->setFrom('test@hostinger-tutorials.com', 'Mr. Drago');
    $mail->addAddress('example@gmail.com', 'Receiver Name');
    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';
        $mail->isHTML(false);
        $mail->Body = <<<EOT
Email: {$_POST['email']}
Name: {$_POST['name']}
Message: {$_POST['message']}
EOT;
        if (!$mail->send()) {
            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
        $msg = 'Invalid email address, message ignored.';
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact form</title>
</head>
<body>
<h1>Let's get in touch!</h1>
<?php if (!empty($msg)) {
    echo "<h2>$msg</h2>";
} ?>
<form method="POST">
    <label for="name">Name: <input type="text" name="name" id="name"></label><br><br>
    
    <label for="email">Email: <input type="email" name="email" id="email"></label><br><br>
    
    <label for="message">Message: <textarea name="message" id="message" rows="8" cols="20"></textarea></label><br><br>
    <input type="submit" value="Send">
</form>
</body>
</html>

Y el resultado final es:

phpmailer-formulario-de-contacto-basico

Cuando el usuario envíe su mensaje, recibirá una confirmación y el contenido llegará al buzón del correo electrónico ingresado en el campo addAddress.

Tip profesional: En caso de que el formulario de contacto de PHPMailer no funcione, agrega la siguiente línea para ver la causa del problema: $mail->SMTPDebug = 2;

¡No olvides quitarlo o dejarlo en cero cuando termines!

PHPMailer ofrece ejemplos adicionales que puedes probar en su repositorio oficial de GitHub. Además, si usas WordPress, puedes crear fácilmente un formulario de contacto con la ayuda de plugins.

Resolución de errores comunes de PHP mail y PHPMailer

PHPMailer es una herramienta bastante fácil de dominar. Pero los errores pueden ocurrir de vez en cuando. Veamos la lista de los errores más comunes al enviar correos con PHP mail y cómo podemos solucionarlos.

Dirección del remitente rechazada: no es propiedad del usuario

Este error puede aparecer como sender address rejected: now owned by user y significa que el servidor no pudo autenticarse utilizando los detalles proporcionados. Para solucionarlo, comprueba los encabezados from y asegúrate de que corresponden a un buzón de correo electrónico existente. De lo contrario, asegúrate de crearlo o cambiarlo y el script comenzará a ejecutarse. Por último, asegúrate de que tu registro SPF esté habilitado.

Gmail no pudo verificar que ejemplo.com envió este mensaje

Si ves esta advertencia al probar un script de correo PHP, podría significar una de las siguientes cosas:

  • Tu registro SPF no está habilitado.
  • El encabezado from usa una dirección de correo electrónico que no existe o que no posees. Asegúrate de usar detalles de autenticación SMTP válidos.

El correo va a la carpeta de spam

Puede haber varias razones por las cuales un mensaje puede resultar en la carpeta de correo no deseado (spam). Veamos algunas de las más comunes:

  • Asunto engañoso. Algunos ejemplos serían “Prueba“; “Hola“; “Pruebas“; “Urgente” o algo similar. Asegúrate de establecer una intención clara en el asunto del mensaje.
  • Los encabezados from incorrectos a menudo causan esto. Es una medida de seguridad para evitar falsificaciones y estafas por correo electrónico.
  • Usaste palabras consideradas como spam. Esta categoría incluiría frases como “gran oferta“; “haga clic aquí“; “promoción especial“; “Esto no es spam” y similares. Intenta cambiar el contenido de tu mensaje para ver si ese es el caso.
  • Tu lista de correo no tiene un botón para darse de baja. Si suficientes personas reportan tus correos como spam, entonces esto es inevitable. Tener un botón para darse de baja es una buena forma de evitar esto.

Conclusión

¡Felicitaciones! Ahora estás familiarizado con PHP mail y puedes usar PHPMailer para enviar correos electrónicos con autenticación SMTP. Aunque este tutorial proporciona ejemplos básicos, la misma sintaxis se puede utilizar para desarrollar un formulario de contacto u otras extensiones para tu sitio web. Para obtener información más detallada, asegúrate de consultar el proyecto oficial de PHPMailer.

¿Tienes algún consejo, trucos o ideas para compartir? ¡Estamos ansiosos por escucharlos en los comentarios a continuación!

1 Comentario

Dale clic aquí para dejar un comentario

This site uses Akismet to reduce spam. Learn how your comment data is processed.