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.

Hosted Exchange con IONOS

La solución de correo electrónico y calendario líder en el mercado con el hosting seguro de IONOS.

Microsoft 2019
Dominio gratis
Asistencia 24/7

¿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.

Consejo

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
bash

Importante. 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";
php

El 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);
php

Enví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;
php

Ahora 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());
}
php

Paso 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;
php

En 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');
php

Paso 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");
php

Paso 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';
php

Paso 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();
php

Asegú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
Servicio de e-mail hosting

Muestra a tus clientes tu profesionalidad con una dirección de e-mail personalizada que coincida con tu dominio.

Seguridad
Antispam incluido
Sin publicidad
Page top