Icono del sitio Códigos de Programación

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

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

Salir de la versión móvil