Cómo enviar correos electrónicos con PHPMailer
PHPMailer es una biblioteca de PHP que regula el envío de correos electrónicos a través de PHP. Este tipo de transmisión de correo electrónico se utiliza principalmente para los formularios de contacto de las páginas web, aunque también es posible enviar correos privados.
- La solución de correo electrónico y calendario líder en el mercado
- Alojamiento seguro
- Acceso móvil en cualquier momento gracias a Microsoft Outlook
¿Qué es PHPMailer?
PHPMailer es una extensión de correo proporcionada por la comunidad para PHP. A diferencia de la función Mail, que desde un principio está integrada en PHP, la probabilidad de que los correos electrónicos enviados con PHPMailer acaben en la carpeta de spam es mucho menor, ya que los correos generados con la biblioteca de PHP se envían utilizando SMTP (un protocolo para transferencia simple de correo utilizado para transferir correos electrónicos a través de Internet). Además, PHPMailer soporta, a diferencia de la función Mail integrada, correos electrónicos HTML y archivos adjuntos.
¿Para qué se utiliza PHPMailer?
El uso de PHPMailer es un poco más engorroso que el uso de proveedores de correo electrónico o programas de correo. Una pregunta frecuente es, por tanto, en qué ámbitos es recomendable usar PHPMailer. El uso del framework PHP facilita la creación de respuestas automatizadas, como las que se generan al gestionar una tienda web. PHPMailer también es muy útil para los formularios de contacto.
Requisitos para el uso de PHPMailer
Para poder trabajar con PHPMailer, primero necesitas un servidor SMTP. Puedes decidir si quieres utilizar el servidor de correo de un proveedor o crear el tuyo propio. Además, para la instalación de la extensión de PHP, se recomienda un gestor de paquetes para PHP como Composer.
Otro requisito para usar PHPMailer es dominar los fundamentos de PHP. Si todavía enfrentas algunas dificultades al respecto, nuestro tutorial PHP para principiantes puede resultarte útil.
Instalación de PHPMailer: instrucciones paso a paso
Paso 1. Descarga la última versión de PHPMailer
Descarga la última versión de PHPMailer. La descarga puede hacerse a través del gestor de paquetes o manualmente desde GitHub.
Variante 1. Descarga a través de Composer
Si has instalado el gestor de paquetes Composer, utiliza el comando:
composer require phpmailer/phpmailer
bashImportante. Si has instalado PHPMailer con Composer, debes incluir “composer” en tu código PHP para poder enviar correos.
Para ello, introduce este código:
require_once "vendor/autoload.php";
phpEl término “requiere_once” asegura que Composer solo se integre una vez. Cualquier otro podría provocar un comportamiento imprevisible o errores en el programa. La instalación con Composer habrá finalizado.
Variante 2: Descarga desde GitHub
Los archivos fuente de PHPMailer también pueden descargarse manualmente pulsando el botón “Code” en el repositorio GitHub correspondiente y descargando el archivo ZIP. Si Git está instalado en tu sistema, también puedes “clonar” el repositorio utilizando un comando de línea de comandos.
Paso 2. Descomprimir archivos
Si has descargado el código fuente de PHPMailer manualmente, tienes que abrir el archivo ZIP. Para ello, selecciona la ubicación donde deseas instalar PHPMailer. De nuevo, primero debes incluir PHPMailer en tu script. Tras haber descomprimido los archivos de PHPMailer en un directorio llamado PHPMailer, utiliza las siguientes líneas de código:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*Clase para tratar con excepciones y errores*/
require 'C:/PHPMailer/src/Exception.php';
/*Clase PHPMailer*/
require 'C:/PHPMailer/src/PHPMailer.php';
/*Clase SMTP necesaria para la conexión con un servidor SMTP*/
require 'C:/PHPMailer/src/SMTP.php';
/*Al crear un objeto PHPMailer, pasa el parámetro "true" para activar las excepciones (mensajes en caso de error)*/
$email = new PHPMailer(true);
phpEnvío de correos electrónicos con PHPMailer: instrucciones paso a paso
Paso 1. Incluir espacios de nombres
Para poder acceder al PHPMailer, asegúrate primero de que los espacios de nombres están incluidos correctamente. Para ello, se utilizan las sentencias use, por lo que tu código debe contener las siguientes líneas:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
phpAhora podrás acceder a las clases individuales utilizando el nombre que aparece después de la última barra.
Paso 2. Encontrar errores
Aunque PHPMailer es una variante muy fiable para enviar correos electrónicos, pueden producirse errores de vez en cuando. Para evitar enviar datos sensibles desde tu servidor de correo a los usuarios en forma de mensaje de error, es recomendable envolver el envío de correos electrónicos con la sentencia Try-Catch:
try {
// Intentar crear una nueva instancia de la clase PHPMailer con excepciones habilitadas
$mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
echo "Mailer Error: ".$e->getMessage());
}
phpPaso 3. Autentificación con SMTP
Para utilizar PHPMailer, debes autenticarte a través de SMTP. Para ello, introduce la dirección de tu servidor de correo, el protocolo correspondiente (ya sea TLS/SSL o SMTP), el puerto, tu nombre de usuario y tu contraseña. El protocolo y el puerto utilizados dependen de tu proveedor de correo. Puedes encontrar los datos del servidor respectivo en las páginas web de los proveedores de correo.
$mail->isSMTP();
$mail->SMTPAuth = true;
// Datos personales
$mail->Host = "smtp.domain.es";
$mail->Port = 587;
$mail->Username = "nombre.apellidoo@domain.es";
$mail->Password = "ejemplocontraseña1234";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
phpEn lugar de usar ENCRYPTION_STARTTLS
como método de cifrado, se puede optar por ENCRYPTION_SMTPS
. Con este último, la conexión al servidor solo se establece si está activado TLS. Además, la comunicación con el servidor solo es posible si este soporta las medidas de cifrado necesarias. Por otro lado, con StartTLS, la conexión al servidor de correo se establece primero sin cifrar. La encriptación se realiza después, y si no es posible la encriptación TLS, el intercambio de datos restante se realiza sin cifrar.
Mientras SMTPS proporciona mayor nivel de seguridad, StartTLS ofrece mejor compatibilidad. Por esta razón, se recurre con mayor frecuencia a StartTLS.
Paso 4. Introducir el destinatario del correo electrónico
Ahora podrás introducir el destinatario del correo electrónico.
// Remitente
$mail->setFrom('info@example.com', 'name');
// Destinatario, opcionalmente también se puede especificar el nombre
$mail->addAddress('info@example.com', 'name');
// Copia
$mail->addCC('info@example.com');
// Copia oculta
$mail->addBCC('info@example.com', 'name');
phpPaso 5. Añadir el contenido del correo
Por supuesto, no debe faltar lo más importante: el contenido del correo electrónico. Este contenido suele consistir en un asunto y un texto, que se ofrece tanto en versión HTML como no HTML. Importante: los programas más antiguos no necesariamente pueden manejar el estándar HTML5, por lo que puede ser recomendable crear tu correo electrónico utilizando solo HTML.
Con PHPMailer, también puedes enviar archivos adjuntos sin problema: tanto imágenes como música, documentos, vídeos o GIFs. La función addAttachment te ayuda a hacerlo. Además, puedes renombrar tus archivos adjuntos con un segundo parámetro opcional.
$mail->isHTML(true);
// Asunto
$mail->Subject = 'Asunto de tu correo electrónico';
// Contenido HTML
$mail->Body = 'El contenido de tu correo en HTML. Los elementos en <b>negrita</b> también están permitidos,';
$mail->AltBody = 'El texto como elemento de texto simple';
// Agregar archivo adjunto
$mail->addAttachment("/home/user/Escritorio/imagendeejemplo.png", " imagendeejemplo.png");
phpPaso 6. Utilizar la codificación de caracteres correcta
En los países de habla española, es aconsejable activar UTF-8 en PHPMailer para evitar errores de visualización, especialmente cuando se utilizan varios archivos adjuntos. Para ello, añade las siguientes líneas de código a tu script PHP:
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
phpPaso 7. Enviar el correo electrónico
En el último paso, solo tienes que enviar el correo electrónico. Para ello, utiliza el comando:
$mail->send();
phpAsegúrate de colocar todo el código mostrado hasta la solicitud de envío en el bloque Try de tu script para que cualquier posible error sea capturado como se describe.
Un ejemplo de código para enviar un correo electrónico
Aquí se resume de nuevo todo el código que necesitas para enviar un correo (con imagen adjunta) utilizando PHPMailer:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Activar o desactivar excepciones mediante variable
$debug = true;
try {
// Crear instancia de la clase PHPMailer
$mail = new PHPMailer($debug);
if ($debug) {
// Genera un registro detallado
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
}
// Autentificación con SMTP
$mail->isSMTP();
$mail->SMTPAuth = true;
// Login
$mail->Host = "smtp.domain.es";
$mail->Port = 587;
$mail->Username = "nombre.apellido@domain.es";
$mail->Password = "ejemplocontraseña1234";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->setFrom('info@example.com', 'name');
$mail->addAddress('info@example.com', 'name');
$mail->addAttachment("/home/user/Escritorio/imagendeejemplo.png", "imagendeejemplo.png");
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->isHTML(true);
$mail->Subject = 'Asunto de tu correo';
$mail->Body = 'El contenido de tu correo en HTML. Los elementos en <b>negrita</b> también están permitidos.';
$mail->AltBody = 'Texto como elemento de texto simple';
$mail->send();
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}
php- Dirección personalizada
- Protección contra virus y spam
- Acceso a tus correos desde cualquier lugar