Enviar correo electrónico con PHPMailer

En esta ocasión vamos aprender a enviar correos electrónicos desde PHP.

Sabemos que PHP tiene un función nativa para enviar correos electrónicos (Mail) pero esta tiene algunas limitaciones y conflictos para envío masivo, por lo cual usaremos una biblioteca adicional para facilitar esta tarea.

PHPMailer es una biblioteca que nos permite el envío de correos electrónicos de forma segura y sencilla.

Requerimientos

  • Servidor web (Apache Server)
  • PHP 5.6 o superior
  • Composer (opcional para instalación por esta vía)

Se pueden usar binarios como XAMPP, WampServer, MAMP, entre otros.

Instalación

Para instalación tenemos dos opciones, una de ellas es vía composer.

composer require phpmailer/phpmailer

Otra opción es de forma manual, descargando la biblioteca en archivo zip.

Para ambas opciones se requiere instalar o extraer en una carpeta en el servidor web.

Agregar biblioteca

Dentro de la carpeta del proyecto vamos a crear un nuevo script llamado index.php

Instalación manual
Instalación vía composer

Para el caso de realizar la instalación manual, se deberá agregar cada clase manualmente:

Ten cuidado al agregar la ruta de las clases ya que algunos servidores tiene la configuración de ser sensibles a mayúsculas y minúsculas.

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

Para la instalación de composer solo hay que agregar el script autoload.php que se encuentra en la carpeta vendor:

require 'vendor/autoload.php';

Ejemplo simple

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

//Ejemplo con el cargador automático de composer
require 'vendor/autoload.php';

//Crear una instancia y pasar true para permitir las excepciones
$mail = new PHPMailer(true);

try {
    //Configuración del servidor
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;             //Habilitar los mensajes de depuración
    $mail->isSMTP();                                   //Enviar usando SMTP
    $mail->Host       = 'smtp.example.com';            //Configurar el servidor SMTP
    $mail->SMTPAuth   = true;                          //Habilitar autenticación SMTP
    $mail->Username   = 'user@example.com';            //Nombre de usuario SMTP
    $mail->Password   = 'secret';                      //Contraseña SMTP
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;   //Habilitar el cifrado TLS
    $mail->Port       = 465;                           //Puerto TCP al que conectarse; use 587 si configuró `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

    //Emisor
    $mail->setFrom('tucorreo@dominio.com', 'Nombre');

    //Destinatarios
    $mail->addAddress('joe@example.net', 'Joe User');     //Añadir un destinatario, el nombre es opcional

    //Destinatarios opcionales
    $mail->addReplyTo('info@example.com', 'Information');  //Responder a
    $mail->addCC('cc@example.com');                        //Copia pública
    $mail->addBCC('bcc@example.com');                      //Copia oculta

    //Archivos adjuntos
    $mail->addAttachment('files/comunicado.pdf', 'Comunicado');         //Agregar archivos adjuntos, nombre opcional

    //Nombre opcional
    $mail->isHTML(true);                         //Establecer el formato de correo electrónico en HTMl
    $mail->Subject = 'Asunto';             
    $mail->Body    = '¡Este es el cuerpo del mensaje HTML <b>en negrita!</b>';
    $mail->AltBody = 'Este es el cuerpo en texto sin formato para clientes de correo que no son HTML';

    $mail->send();    //Enviar correo eletrónico
    echo 'El mensaje ha sido enviado';
} catch (Exception $e) {
    echo "No se pudo enviar el mensaje. Error de correo: {$mail->ErrorInfo}";
}

Debes cambiar los datos de configuración por lo que te proporciona tu servidor de correo electrónico.

Puedes encontrar más ejemplo en: https://github.com/PHPMailer/PHPMailer/tree/master/examples