Cómo usar PHP Mail y PHPMailer – Guía Completa

El correo electrónico es una parte integral de cualquier proyecto o negocio. Si bien existen numerosas plataformas de correo electrónico de negocios, como Hostinger, Zoho Mail y G Suite, también puedes enviar correos usando PHP.

En este tutorial, aprenderemos cómo enviar correos electrónicos utilizando la función incorporada PHP mail () y el PHPMailer con el Protocolo simple de transferencia de correo (SMTP).

Usar la función PHP mail()

La función mail() invoca un programa Sendmail, generalmente configurado por el administrador del sistema, que te permite enviar correos electrónicos.

Para usar esta función, asegúrate de que tu proveedor de alojamiento te permita administrar manualmente la opción del servicio Sendmail.

Si ya estás usando Hostinger, puedes habilitar o deshabilitar esta función accediendo a tu hPanel. Haz clic en 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 un par de clics.

sendmail habilitado

Creando un archivo de prueba para el correo PHP

En primer lugar, debes crear un archivo para el script de PHP mail y colocarlo en el directorio public_html para que se pueda acceder fácilmente a través del nombre de dominio.

  1. Para acceder al hPanel, haz clic en el Administrador de archivos.
  2. Crea un nuevo archivo haciendo clic en Agregar nuevo. En este ejemplo lo llamamos testmail.php y luego presiona Crear.
    arcihvo de prueba php mail
  3. Haz doble clic en testmail.php ya que necesitarás editarlo usando la función PHP mail (). Aquí hay un ejemplo de los componentes básicos de la función que utilizaremos en este tutorial. Estos se explicarán con más detalle en la siguiente sección. Por ahora, haz clic en Guardar y cerrar cuando hayas terminado de editar.
    Ejemplo de los componentes básicos del correo PHP.
  4. Ahora, puedes enviar un correo electrónico accediendo a TuDominio/testmail.php desde el navegador. Recuerda que debes cambiar TuDominio al dominio que utilizaste para crear testmail.php.
  5. Tu correo electrónico objetivo recibirá el mensaje que enviaste. La bandeja de entrada de tu destinatario recibirá el correo electrónico de prueba.
    Comprender los componentes de correo PHP

Entendiendo los componentes de PHP Mail

Como mencionamos antes, te presentaremos los componentes de un script de PHP mail básico. Para este ejemplo, hemos usado una sintaxis básica de correo electrónico para ayudarte a comprender esta función con más detalle.

Sin embargo, si necesitas más información sobre la función Sendmail y sus componentes, puedes consultar la documentación oficial de PHP.

Aquí está la sintaxis PHP que hemos usado en la sección anterior:

<?php
    ini_set( 'display_errors', 1 );
    error_reporting( E_ALL );
    $from = "test@hostinger-tutorials.com";
    $to = "test@hostinger.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.";
?>

Vamos a desglosarla paso a paso:

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

Estas dos primeras líneas permiten la notificación de errores: te informarán si el script no se ejecuta.

$from = "test@hostinger-tutorials.com";

Esta línea debe contener la dirección de correo electrónico del remitente. La mayoría de los proveedores de alojamiento no permiten direcciones de correo electrónico aleatorias aquí, ya que puede usarse para falsificar. Utiliza uno creado para tu nombre de dominio o marca para ejecutar PHP mail con éxito.

$to = "test@gmail.com";

Aquí es donde insertas la dirección de correo electrónico de tu destinatario.

$subject = "Checking PHP mail";

Ingresa el asunto de tu mensaje de correo electrónico en esta línea.

$message = "PHP mail works just fine";

Aquí puedes redactar tu mensaje.

$headers = "From:" . $from;

Detalla la información vital, como la dirección del remitente, la ubicación de respuesta, etc.

mail ($to,$subject,$message,$headers);

Esta línea se usa para ejecutar la función.

echo "The email message was sent.";

El mensaje que aparecerá una vez que el script se ejecute con éxito.

Usar PHPMailer para enviar correos

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 Simple Mail Transfer Protocol (SMTP). Esta biblioteca simplifica el complicado proceso de crear un correo PHP al proporcionar un conjunto de funciones para crear y enviar un correo electrónico.

Instalar PHPMailer es bastante simple, especialmente si tienes Composer instalado. Si estás utilizando Hostinger, no necesitas preocuparte por esto ya que viene preinstalado con todos nuestros planes de alojamiento.

No obstante, si necesitas instalar PHPMailer manualmente, debes conectar tu cuenta de alojamiento a través del terminal SSH. Sigue estos pasos:

  1. Descarga e instala el cliente PuTTY SSH.
  2. Ve a tu panel de hPanel, busca y haz clic en Acceso SSH en la sección Avanzado.
  3. Toma nota de la información de acceso SSH. Necesitarás la dirección IP SSH, puerto, nombre de usuario y contraseña.
  4. Abre PuTTY, luego configura tu IP SSH y el puerto correspondiente.
    Configuración de PuTTY SSH.
  5. Presiona Abrir y aparecerá una ventana de comando. Escribe tu nombre de usuario y contraseña SSH. Una vez hecho esto, presiona Enter. Recuerda que PuTTY no mostrará tu contraseña. No te confundas si tu contraseña no aparece en la pantalla.
  6. Ejecuta el siguiente comando:
    cd public_html
  7. Luego, ejecta este comando:
    composer2 require phpmailer/phpmailer
  8. Espera un momento hasta que finalice el proceso de instalación.
Proceso de instalación de PHPMailer.

Usando PHPMailer con Hostinger SMTP

Una vez que tengas listo PHPMailer, puedes usarlo para enviar correos PHP usando Hostinger SMTP.

  1. Crea una cuenta de correo electrónico accediendo a tu hPanel, luego ve a Cuenta de correo -> Crear una nueva cuenta de Email. Completa la nueva dirección de correo electrónico y establece una contraseña antes de hacer clic en Crear.
    crear cuenta de correo en panel de hosting
  2. Cuando hayas terminado, presta atención a tus datos SMTP ubicados en la misma sección:
    detalles de correo electronico

Consejo profesional

Debes recordar el nombre de usuario de la cuenta de correo electrónico, la contraseña de la cuenta, host SMTP y puerto SMTP para enviar un correo electrónico usando PHPMailer.

  1. Crea un archivo testphpmailer.php en Public_html. Accede al panel de control de hPanel y haz clic en Administrador de archivos.
  2. Presiona Agregar nuevo. Nombra el archivo como testphpmailer.php y haz clic en Crear.
  3. Haz doble clic en el archivo testphpmailer.php recién creado, luego copia y pega lo siguiente:
<?php
   require 'vendor/autoload.php';
   use PHPMailer\PHPMailer\PHPMailer;
   $mail = new PHPMailer;
   $mail->isSMTP();
   $mail->SMTPDebug = 2;
   $mail->Host = 'smtp.hostinger.com';
   $mail->Port = 587;
   $mail->SMTPAuth = true;
   $mail->Username = 'mymail@myawesomedomain.tld';
   $mail->Password = 'My$tr0ngPa55w0rd!';
   $mail->setFrom('mymail@myawesomedomain.tld', 'Your Name');
   $mail->addReplyTo('mymail@myawesomedomain.tld', 'Your Name');
   $mail->addAddress('recipient@domain.tld', 'Receiver Name');
   $mail->Subject = 'Checking if PHPMailer works';
   $mail->msgHTML(file_get_contents('message.html'), __DIR__);
   $mail->Body = 'This is just a plain text message body';
   //$mail->addAttachment('attachment.txt');
   if (!$mail->send()) {
       echo 'Mailer Error: ' . $mail->ErrorInfo;
   } else {
       echo 'The email message was sent.';
   }
?>
  1. Modifica el código anterior según corresponda. Por ejemplo, debes reemplazar EMAIL_ACCOUNT_PASSWORD  por tu contraseña de correo electrónico o test@hostinger-tutorials.com con tu nombre de usuario, example@gmail.com con la dirección de correo electrónico de tu destinatario, etc. Una vez hecho esto, haz clic en Guardar y cerrar.
  2. Tu PHPMailer ahora está listo para ser utilizado. Ejecutael script ingresando TuDominio.com/testphpmailer.php en tu navegador.

Entendiendo los componentes de PHPMailer

Para comprender cómo funciona PHPMailer, investiguemos el script de ejemplo anterior que utiliza SMTP para la entrega por correo electrónico. Aquí está la explicación de 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;

Mostrará un mensaje de error con una explicación cuando la secuencia de comandos no se envíe.

} else {

Define lo que sucede si el script se ejecuta.

echo 'The email message was sent!';

Si el correo electrónico se envía correctamente, aparecerá este mensaje.

Consejo profesional

La línea SMTPDebug = 2; solo es útil cuando pruebas una secuencia de comandos y deseas ver cómo funciona. Debes cambiarlo a SMTPDebug = 0; si ya terminaste la prueba. Esto se hace para evitar que el usuario final vea el informe de entrega SMTP.

Si revisaste todo el código, notarás que estamos haciendo algo un poco diferente al primer ejemplo, estamos enviando un mensaje HTML en vez de una pieza de texto.

Por lo tanto, tu mensaje cargará tu contenido desde el archivo message.html ubicado en el mismo directorio: public_html.

Este formato ofrece una mayor funcionalidad en comparación con los mensajes de texto sin formato, ya que HTML es altamente personalizable. Puedes cambiar el color, el estilo, la imagen o incluso incluir archivos multimedia que generalmente son obsoletos en un correo electrónico de texto sin formato.

Formulario de contacto de PHPMailer

Puedes utilizar PHPMailer para mucho más que simplemente enviar mensajes simples a través de PHP. 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 = 'smtp.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 = 'Share it with us!';
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact form</title>
</head>
<body>
<h1>Do You Have Anything in Mind?</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>

Al igual que con los scripts anteriores, debes crear un nuevo archivo en la carpeta public_html. En este caso, nombramos el archivo formscript.php. Edita la información dentro del script respectivamente. Después de eso, solo necesitas ejecutar el script desde tu navegador.

Así es cómo lucirá el resultado final:

Ejemplo de formulario de contacto interactivo de PHPMailer.

Una vez que tu cliente envíe un mensaje, recibirá un mensaje de confirmación y el contenido llegará a la bandeja de entrada del correo electrónico que ingresaste aquí:

$mail->addAddress('example@gmail.com', 'Receiver Name');

Consejo 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 cambiarlo de 2 a 0 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 como WP Forms, Formidable Forms o Gravity Forms.

wp-forms

Solución a errores comunes de PHP mail y PHPMailer

Pueden ocurrir errores de vez en cuando al usar PHP Mail o PHPMailer. A continuación, te mostramos una lista de los problemas más comunes y las formas de solucionarlos.

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

Este error significa que el servidor no pudo autenticarse con los detalles proporcionados.

Para solucionarlo, verifica la dirección de correo electrónico que utilizaste para enviar el mensaje y asegúrate de que corresponda a una casilla de correo electrónico existente. Si estás apuntando a una bandeja de entrada incorrecta, cámbiala en consecuencia. Además, verifica que hayas habilitado tu registro SPF.

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

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

  • Tu registro SPF no está habilitado. Puedes encontrar los pasos sobre cómo agregar uno aquí.
  • Has enviado un correo electrónico desde una dirección que no existe o que no te pertenece. Asegúrate de utilizar detalles de autenticación SMTP válidos.

El correo va a la carpeta de correo no deseado

Hay varias razones por las que un correo PHP puede aparecer como spam. Éstos son algunos de las más comunes:

  • Asunto engañoso o parecido a spam. Algunos ejemplos de eso serían «prueba» o «probando«, «hola«, «urgente» o algo similar. Asegúrate de establecer una intención clara en el asunto de tu mensaje.
  • Estás utilizando una dirección de remitente incorrecta que invoca las medidas de seguridad para filtrar tu correo electrónico. Esto se realiza como prevención contra la suplantación de identidad y estafas por correo electrónico.
  • Estás utilizando palabras de activación de spam. Esta categoría incluye frases como «gran oferta» «haz clic aquí» «promoción especial» «esto no es spam» y así sucesivamente. 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. Cuando hay muchas personas que reportan tus correos electrónicos como spam, te resultará difícil evitar el filtro de spam. Tener un botón para darse de baja es una excelente manera de evitar esto e inspirar más confianza en tus lectores.

Conclusión

Felicitaciones, ahora estás familiarizado con la función de envío de correo electrónico de PHP y cómo 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 la página del proyecto PHPMailer. Si tiene algún consejo, truco o idea para compartir, estaremos felices de leerte en la sección de comentarios a continuación.

Author
El autor

Gustavo B.

Gustavo es un apasionado por la creación de sitios web. Se enfoca en la aplicación de estrategias SEO en Hostinger para España y Latinoamérica, así como la creación de contenidos de alto nivel. Cuando no está aplicando nuevos trucos en WordPress lo puedes encontrar tocando la guitarra, viajando o tomando un curso online.