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).
Tabla de Contenidos
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.
El servicio sendmail está habilitado por defecto. Pero en caso de que no lo esté, puedes hacerlo con solo un par de clics.
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.
- Para acceder al hPanel, haz clic en el Administrador de archivos.
- Crea un nuevo archivo haciendo clic en Agregar nuevo. En este ejemplo lo llamamos testmail.php y luego presiona Crear.
- 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.
- 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.
- Tu correo electrónico objetivo recibirá el mensaje que enviaste. La bandeja de entrada de tu destinatario recibirá el correo electrónico de prueba.
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:
- Descarga e instala el cliente PuTTY SSH.
- Ve a tu panel de hPanel, busca y haz clic en Acceso SSH en la sección Avanzado.
- Toma nota de la información de acceso SSH. Necesitarás la dirección IP SSH, puerto, nombre de usuario y contraseña.
- Abre PuTTY, luego configura tu IP SSH y el puerto correspondiente.
- 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.
- Ejecuta el siguiente comando:
cd public_html
- Luego, ejecta este comando:
composer2 require phpmailer/phpmailer
- Espera un momento hasta que finalice el proceso de instalación.
Usando PHPMailer con Hostinger SMTP
Una vez que tengas listo PHPMailer, puedes usarlo para enviar correos PHP usando Hostinger SMTP.
- 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.
- Cuando hayas terminado, presta atención a tus datos SMTP ubicados en la misma sección:
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.
- Crea un archivo testphpmailer.php en Public_html. Accede al panel de control de hPanel y haz clic en Administrador de archivos.
- Presiona Agregar nuevo. Nombra el archivo como testphpmailer.php y haz clic en Crear.
- 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.'; } ?>
- 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.
- 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:
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.
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.
- 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.
Comentarios
June 11 2018
Un tutorial muy completo. Gracias! Lo pondré en práctica
August 01 2018
¡Hola! He probado la primera opción, ya que para algo sencillo me parece más interesante. Todo funciona correctamente, pero en la cabecera del mail que recibo, me sale: u710086...@srv111.main-hosting.eu en nombre de info@midominio.com ¿Cómo puedo hacer que solo me llegue con info@midominio.com? Gracias
November 19 2018
Hola Iván, Recomendamos que revises todos los aspectos relacionados con PHP Mail desde aquí mismo: https://www.hostinger.co/tutoriales/enviar-emails-usando-php-mail/#Metodo-2-8211-Usar-PHPMailer Esto te dará la autentificación desde el servidor de salida SMTP de Hostinger.
July 28 2019
¡Gracias por la ayuda! Me sirvió ?
July 29 2019
Qué bien!!!! :D
August 05 2019
buenisimo, pero tengo el problema de que cuando quiero enviar desde una cuenta de una empresa donde trabajo me sale esto: SERVER -> CLIENT: 220-pacha2.*****.com.bo ESMTP Exim 4.92 #2 Mon, 05 Aug 2019 12:39:09 -0400 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. a que se debe?? :(
August 05 2019
aclaro que los datos de usuario y contraseña son correctos, pero aun asi me sale el mensaje
August 29 2019
Hola Diego, Este problema puede deberse a una configuración incorrecta del servidor. Si quieres muéstranos el mensaje completo para poder ayudarte.
August 08 2020
Buenas, mi duda es la siguiente: Quiero tener un envío de correos de manera automática, por ejemplo que cada día se haga una comprobación X y en base a esa comprobación se envíen una serie de correos, Ej: que se envíen 2 correos cada 5 días... Esto como se podría configurar en Hostinger o PHP? Gracias!
August 14 2020
Hola Kazu, en este caso te sugiero contactar a tu proveedor de hosting para que te ayude. Si estás con Hostinger nuestros agentes te pueden orientar para que puedas realizar tu configuración.
September 24 2020
Hola tengo este error al usar PHPMailer, que podria ser?: Parse error: syntax error, unexpected 'use' (T_USE) in, Gracias la que me pueda ayudar
November 18 2020
Hola, he probado con testmail.php, cambiando el mail de destinatario como se indica, pero no me llega el correo, sin embargo me dice que el mail se envió exitosamente.
December 09 2020
Hola Juan, en ese caso te sugiero contactar a tu proveedor de hosting para que te ayude. Si estás con Hostinger nuestros agentes te pueden orientar para que puedas encontrar una solución a tu problema. Saludos!
December 27 2020
Ya mismo lo estoy implementando en videoper.com. Mil Gracias por toda la data.