¿Qué es y para que sirve PHPMailer?

Hashtags: #Mail() #Formulario

En algunos servidores no está disponible la función mail() de PHP. Esta función es cada vez más habitual que esté desactivada en los servidores como medida de seguridad. Normalmente se desactiva por protección contra SPAM, Mail Spoofing y Proxy Mail Servers. En caso de que cualquiera de las webs alojadas sea vulnerada por un usuario malintencionado, se evitan los riesgos mencionados, deshabilitando esta función.

La librería PHPMailer

La librería PHPMailer nos permite, entre otras funcionalidades, establecer una conexión SMTP con un servidor de correo. Este servidor SMTP será quién envíe realmente nuestro correo electrónico.

La web oficial del proyecto en GitHub contiene la documentación con las opciones de instalación y configuración. El enlace a Github es: https://github.com/PHPMailer/PHPMailer.

Instalación de PHPMailer

  1. Descargá PHPMailer desde https://github.com/PHPMailer/PHPMailer. Presioná el botón verde Code y, luego, hacé clic en Download ZIP en el cuadro Clone.

  1. Descomprimí el archivo descargado “PHPMailer-master.zip” y renombrá el directorio PHPMailer-master a PHPMailer

  2. Copiá el directorio PHPMailer dentro de la raíz de tu página web (por ejemplo public_html). Para verificar que las rutas son correctas, debería existir, desde la raíz de nuestro proyecto: /PHPMailer/src/PHPMailer.php

Ejemplo de configuración

  1. Guardá el siguiente código en un archivo, por ejemplo, ejemplo.php

// Some code<?php
// Mostrar errores PHP (Desactivar en producción)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Incluir la libreria PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

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

// Inicio
$mail = new PHPMailer(true);

try {
    // Configuracion SMTP
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                         // Mostrar salida (Desactivar en producción)
    $mail->isSMTP();                                               // Activar envio SMTP
    $mail->Host  = 'CONFIGURAR_SERVIDOR_SMTP';                     // Servidor SMTP
    $mail->SMTPAuth  = true;                                       // Identificacion SMTP
    $mail->Username  = 'CONFIGURAR_USUARIO_SMTP';                  // Usuario SMTP
    $mail->Password  = 'CONFIGURAR_CONTRASEÑA_SMTP';	          // Contraseña SMTP
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port  = 587;
    $mail->setFrom('hola@prueba.com', 'Tu nombre');                // Remitente del correo

    // Destinatarios
    $mail->addAddress('prueba@midominio.com', 'Nombre del destinario');  // Email y nombre del destinatario

    // Contenido del correo
    $mail->isHTML(true);
    $mail->Subject = 'Asunto del correo';
    $mail->Body  = 'Contenido del correo <b>en HTML!</b>';
    $mail->AltBody = 'Contenido del correo en texto plano para los clientes de correo que no soporten HTML';
    $mail->send();
    echo 'El mensaje se ha enviado';
} catch (Exception $e) {
    echo "El mensaje no se ha enviado. Mailer Error: {$mail->ErrorInfo}";
}
  1. Modificá los parámetros de conexión en este archivo, el email del remitente y del destinatario donde enviáremos nuestro correo de prueba. Buscá las siguientes lineas en el script y reemplazá los datos por los tuyos. ¡Es muy importante configurar estos datos usando una casilla valida a la que puedas acceder!

// Configuracion SMTP
$mail->Host  = 'mail.tudominio.com';   // Acá debes configurar el servidor SMTP
$mail->Username  = 'casilla@tudominio.com';  // Esta será la casilla que enviará los mails
$mail->Password  = 'contraseña de casilla';  // Contraseña de tu casilla
$mail->setFrom('casilla@tudominio.com', 'Tu nombre'); // Configurá tu nombre y la casilla remitente

Debajo verás esta sección para completar con tus datos:

// Destinatarios    
$mail->addAddress('prueba@otrodominio.com', 'Nombre del destinario');  // Email y nombre del destinatario

Y la ultima sección a completar con tus datos:

// Contenido del correo 
$mail->isHTML(true);
$mail->Subject = 'Asunto del correo';  // El asunto que mostrará el mail enviado
$mail->Body  = 'Contenido del correo <b>en HTML!</b>';  
  1. Subí por FTP o, utilizando el Administrador de Archivos de cPanel, el directorio PHPMailer y el archivo ejemplo.php a la raíz del directorio público de tu pagina web (public_html).

  2. Ejecutá el ejemplo desde https://tudominio.com/ejemplo.php. Te mostrará el debug del proceso y, luego recibirás el correo electrónico: "El mensaje se ha enviado" Si muestra algún error, ya sea de PHP o de conexión SMTP, deberás depurar el origen del problema. El mensaje de error que recibirías en este caso es: "El mensaje no se ha enviado. Mailer Error:<tipo de error>

En producción, recordá desactivar el debug de errores PHP y SMTP cambiando las primeras lineas del código de prueba:

ini_set('display_errors', 1);    // Cambiá el 1 por 0
ini_set('display_startup_errors', 1); // Cambiá el 1 por 0
error_reporting(E_ALL); // Cambiá el "E_ALL" por 0

Última actualización