Base de Conocimiento
Envío de correo utilizando PHPMailer
Escrito por Ivan Fernando Duque en 07 October 2016 03:31 PM

En este artículo podrá encontrar un ejemplo sobre como realizar un envío desde PHP utilizando la librería PHPMailer.

Inicialmente es necesario descargar los archivos de la librería en https://github.com/PHPMailer/PHPMailer haciendo clic en "Clone or download" y luego en "Download ZIP". El siguiente es un enlace directo al paquete: https://github.com/PHPMailer/PHPMailer/archive/master.zip

De este paquete al descomprimirlo solamente hace falta tomar los archivos que están dentro de la carpeta "src":

* Exception.php
* PHPMailer.php
* SMTP.php
* OAuth.php
* POP3.php

Luego se debe crear un nuevo archivo con los parámetros para realizar el envío. En este ejemplo se llamará "envio.php" y tendrá el siguiente código:

- Para realizar el envío desde una cuenta de correo con el servicio de correos en ColombiaHosting:

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

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

$mail = new PHPMailer(true);                              
try {
    //$mail->SMTPDebug = 4;                               // Habilitar el debug

    $mail->isSMTP();                                      // Usar SMTP
    $mail->Host = 'servidor';  // Especificar el servidor SMTP reemplazando por el nombre del servidor donde esta alojada su cuenta
    $mail->SMTPAuth = true;                               // Habilitar autenticacion SMTP
    $mail->Username = 'correo@sudominio.com';                 // Nombre de usuario SMTP donde debe ir la cuenta de correo a utilizar para el envio
    $mail->Password = 'miclave';                           // Clave SMTP donde debe ir la clave de la cuenta de correo a utilizar para el envio
    $mail->SMTPSecure = 'ssl';                            // Habilitar encriptacion
    $mail->Port = 465;                                    // Puerto SMTP                     
    $mail->Timeout       =   30;
    $mail->AuthType = 'LOGIN';

    //Recipients   

    $mail->setFrom('correo@sudominio.com');     //Direccion de correo remitente (DEBE SER EL MISMO "Username")
    $mail->addAddress('hola@dominio.net');     // Agregar el destinatario
    $mail->addReplyTo('correo@sudominio.com');     //Direccion de correo para respuestas     

    //Content
    $mail->isHTML(true);                                  
    $mail->Subject = 'Mensaje de ejemplo';
    $mail->Body    = 'Este es solo un mensaje de ejemplo <b>en HTML!</b>';
    
    $mail->send();
    echo 'El mensaje ha sido enviado';

} catch (Exception $e) {
    echo 'El mensaje no pudo ser enviado. Mailer Error: ', $mail->ErrorInfo;
}

- Para realizar el envío desde una cuenta de correo con el servicio de correos de Gmail:

1. El usuario del correo gmail debe loguearse en gmail.com

2. Luego entrar en este enlace y aceptar accesos:
https://accounts.google.com/DisplayUnlockCaptcha

3. Luego entrar en este enlace y habilitar "Permitir el acceso de aplicaciones menos seguras":
https://myaccount.google.com/security


4. Utilizar el siguiente código:

 

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

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

$mail = new PHPMailer(true);                              
try {
    //$mail->SMTPDebug = 4;                               // Habilitar el debug

    $mail->isSMTP();                                      // Usar SMTP
    $mail->Host = 'smtp.gmail.com';  // Especificar el servidor SMTP reemplazando por el nombre del servidor donde esta alojada su cuenta
    $mail->SMTPAuth = true;                               // Habilitar autenticacion SMTP
    $mail->Username = 'correo@gmail.com';                 // Nombre de usuario SMTP donde debe ir la cuenta de correo a utilizar para el envio
    $mail->Password = 'miclave';                           // Clave SMTP donde debe ir la clave de la cuenta de correo a utilizar para el envio
    $mail->SMTPSecure = 'ssl';                            // Habilitar encriptacion
    $mail->Port = 465;                                    // Puerto SMTP                     
    $mail->Timeout       =   30;
    $mail->AuthType = 'LOGIN';

    //Recipients   

    $mail->setFrom('correo@gmail.com');     //Direccion de correo remitente (DEBE SER EL MISMO "Username")
    $mail->addAddress('hola@dominio.net');     // Agregar el destinatario
    $mail->addReplyTo('correo@gmail.com');     //Direccion de correo para respuestas     

    //Content
    $mail->isHTML(true);                                  
    $mail->Subject = 'Mensaje de ejemplo';
    $mail->Body    = 'Este es solo un mensaje de ejemplo <b>en HTML!</b>';
    
    $mail->send();
    echo 'El mensaje ha sido enviado';

} catch (Exception $e) {
    echo 'El mensaje no pudo ser enviado. Mailer Error: ', $mail->ErrorInfo;
}


- Para realizar el envío desde una cuenta de correo con el servicio de correos de Hotmail:

Es necesario que verifique la identidad de la cuenta de correo remitente en: https://account.live.com/Activity

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

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

$mail = new PHPMailer(true);                              
try {
    //$mail->SMTPDebug = 4;                               // Habilitar el debug

    $mail->isSMTP();                                      // Usar SMTP
    $mail->Host = 'smtp-mail.outlook.com'; // Especificar el servidor SMTP reemplazando por el nombre del servidor donde esta alojada su cuenta
    $mail->SMTPAuth = true;                               // Habilitar autenticacion SMTP
    $mail->Username = 'correo@hotmail.com';                 // Nombre de usuario SMTP donde debe ir la cuenta de correo a utilizar para el envio
    $mail->Password = 'miclave';                           // Clave SMTP donde debe ir la clave de la cuenta de correo a utilizar para el envio
    $mail->SMTPSecure = 'tls';                            // Habilitar encriptacion
    $mail->Port = 587;                                    // Puerto SMTP                     
    $mail->Timeout       =   30;
    $mail->AuthType = 'LOGIN';

    //Recipients   

    $mail->setFrom('correo@hotmail.com');     //Direccion de correo remitente (DEBE SER EL MISMO "Username")
    $mail->addAddress('hola@dominio.net');     // Agregar el destinatario
    $mail->addReplyTo('correo@hotmail.com');     //Direccion de correo para respuestas     

    //Content
    $mail->isHTML(true);                                  
    $mail->Subject = 'Mensaje de ejemplo';
    $mail->Body    = 'Este es solo un mensaje de ejemplo <b>en HTML!</b>';
    
    $mail->send();
    echo 'El mensaje ha sido enviado';

} catch (Exception $e) {
    echo 'El mensaje no pudo ser enviado. Mailer Error: ', $mail->ErrorInfo;
}

Tanto los archivos de PHPMailer como el archivo de los parámetros del envío deben estar en la misma carpeta.

En caso de que el envío no se genere, se pueden obtener más detalles del error habilitando el debug. Para ello simplemente se deben remover los // que están antes de la línea $mail->SMTPDebug = 4; y luego guardar los cambios para intentar de nuevo el envío.

(8 votes)
El artículo fue de ayuda
El artículo no fue de ayuda

Sistema de Soporte de ColombiaHosting