PHPMailer es una bi­blio­te­ca de PHP que regula el envío de correos ele­c­tró­ni­cos a través de PHP. Este tipo de tra­n­s­mi­sión de correo ele­c­tró­ni­co se utiliza pri­n­ci­pa­l­me­n­te para los fo­r­mu­la­rios de contacto de las páginas web, aunque también es posible enviar correos privados.

Hosted Microsoft Exchange 2019
  • The world’s leading email and calendar solution
  • Secure hosting from a single source
  • Anytime remote access with Microsoft Outlook

¿Qué es PHPMailer?

PHPMailer es una extensión de correo pro­po­r­cio­na­da por la comunidad para PHP. A di­fe­re­n­cia de la función Mail, que desde un principio está integrada en PHP, la pro­ba­bi­li­dad de que los correos ele­c­tró­ni­cos enviados con PHPMailer acaben en la carpeta de spam es mucho menor, ya que los correos generados con la bi­blio­te­ca de PHP se envían uti­li­za­n­do SMTP (un protocolo para tra­n­s­fe­re­n­cia simple de correo utilizado para tra­n­s­fe­rir correos ele­c­tró­ni­cos a través de Internet). Además, PHPMailer soporta, a di­fe­re­n­cia de la función Mail integrada, correos ele­c­tró­ni­cos HTML y archivos adjuntos.

¿Para qué se utiliza PHPMailer?

El uso de PHPMailer es un poco más engorroso que el uso de pro­vee­do­res de correo ele­c­tró­ni­co o programas de correo. Una pregunta frecuente es, por tanto, en qué ámbitos es re­co­me­n­da­ble usar PHPMailer. El uso del framework PHP facilita la creación de re­s­pue­s­tas au­to­ma­ti­za­das, como las que se generan al gestionar una tienda web. PHPMailer también es muy útil para los fo­r­mu­la­rios de contacto.

Re­qui­si­tos 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 in­s­ta­la­ción de la extensión de PHP, se re­co­mie­n­da un gestor de paquetes para PHP como Composer.

Consejo

Otro requisito para usar PHPMailer es dominar los fu­n­da­me­n­tos de PHP. Si todavía enfrentas algunas di­fi­cu­l­ta­des al respecto, nuestro tutorial PHP para pri­n­ci­pia­n­tes puede re­su­l­tar­te útil.

In­s­ta­la­ción de PHPMailer: in­s­tru­c­cio­nes 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 ma­nua­l­me­n­te 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

Im­po­r­ta­n­te. 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 co­m­po­r­ta­mie­n­to im­pre­vi­si­ble o errores en el programa. La in­s­ta­la­ción con Composer habrá fi­na­li­za­do.

Variante 2: Descarga desde GitHub

Los archivos fuente de PHPMailer también pueden de­s­ca­r­gar­se ma­nua­l­me­n­te pulsando el botón “Code” en el re­po­si­to­rio GitHub co­rre­s­po­n­die­n­te y de­s­ca­r­ga­n­do el archivo ZIP. Si Git está instalado en tu sistema, también puedes “clonar” el re­po­si­to­rio uti­li­za­n­do un comando de línea de comandos.

Paso 2. De­s­co­m­pri­mir archivos

Si has de­s­ca­r­ga­do el código fuente de PHPMailer ma­nua­l­me­n­te, tienes que abrir el archivo ZIP. Para ello, se­le­c­cio­na la ubicación donde deseas instalar PHPMailer. De nuevo, primero debes incluir PHPMailer en tu script. Tras haber de­s­co­m­pri­mi­do los archivos de PHPMailer en un di­re­c­to­rio llamado PHPMailer, utiliza las si­guie­n­tes 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 ele­c­tró­ni­cos con PHPMailer: in­s­tru­c­cio­nes 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 co­rre­c­ta­me­n­te. Para ello, se utilizan las se­n­te­n­cias use, por lo que tu código debe contener las si­guie­n­tes líneas:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
php

Ahora podrás acceder a las clases in­di­vi­dua­les uti­li­za­n­do el nombre que aparece después de la última barra.

Paso 2. Encontrar errores

Aunque PHPMailer es una variante muy fiable para enviar correos ele­c­tró­ni­cos, pueden pro­du­ci­r­se 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 re­co­me­n­da­ble envolver el envío de correos ele­c­tró­ni­cos 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. Au­te­n­ti­fi­ca­ción con SMTP

Para utilizar PHPMailer, debes au­te­n­ti­car­te a través de SMTP. Para ello, introduce la dirección de tu servidor de correo, el protocolo co­rre­s­po­n­die­n­te (ya sea TLS/SSL o SMTP), el puerto, tu nombre de usuario y tu co­n­tra­se­ña. El protocolo y el puerto uti­li­za­dos dependen de tu proveedor de correo. Puedes encontrar los datos del servidor re­s­pe­c­ti­vo en las páginas web de los pro­vee­do­res 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 co­mu­ni­ca­ción con el servidor solo es posible si este soporta las medidas de cifrado ne­ce­sa­rias. Por otro lado, con StartTLS, la conexión al servidor de correo se establece primero sin cifrar. La en­cri­p­ta­ción se realiza después, y si no es posible la en­cri­p­ta­ción TLS, el in­te­r­ca­m­bio de datos restante se realiza sin cifrar.

Mientras SMTPS pro­po­r­cio­na mayor nivel de seguridad, StartTLS ofrece mejor co­m­pa­ti­bi­li­dad. Por esta razón, se recurre con mayor fre­cue­n­cia a StartTLS.

Paso 4. In­tro­du­cir el de­s­ti­na­ta­rio del correo ele­c­tró­ni­co

Ahora podrás in­tro­du­cir el de­s­ti­na­ta­rio del correo ele­c­tró­ni­co.

// 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 im­po­r­ta­n­te: el contenido del correo ele­c­tró­ni­co. Este contenido suele consistir en un asunto y un texto, que se ofrece tanto en versión HTML como no HTML. Im­po­r­ta­n­te: los programas más antiguos no ne­ce­sa­ria­me­n­te pueden manejar el estándar HTML5, por lo que puede ser re­co­me­n­da­ble crear tu correo ele­c­tró­ni­co uti­li­za­n­do solo HTML.

Con PHPMailer, también puedes enviar archivos adjuntos sin problema: tanto imágenes como música, do­cu­me­n­tos, vídeos o GIFs. La función ad­dA­t­ta­ch­me­nt 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 co­di­fi­ca­ción de ca­ra­c­te­res correcta

En los países de habla española, es aco­n­se­ja­ble activar UTF-8 en PHPMailer para evitar errores de vi­sua­li­za­ción, es­pe­cia­l­me­n­te cuando se utilizan varios archivos adjuntos. Para ello, añade las si­guie­n­tes líneas de código a tu script PHP:

$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
php

Paso 7. Enviar el correo ele­c­tró­ni­co

En el último paso, solo tienes que enviar el correo ele­c­tró­ni­co. 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 ele­c­tró­ni­co

Aquí se resume de nuevo todo el código que necesitas para enviar un correo (con imagen adjunta) uti­li­za­n­do 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
E-mail hosting
El servicio de correo que se adapta a tu profesión
  • Dirección pe­r­so­na­li­za­da
  • Pro­te­c­ción contra virus y spam
  • Acceso a tus correos desde cualquier lugar
Ir al menú principal