MENUMENU

Cómo enviar correos vía SMTP con PHPMailer

Ruta:

PHPMailer es una clase creada específicamente para hacer sencillo el envío de emails que tienen características complejas, y la verdad es que es bastante útil y potente. Permite enviar email con archivos adjuntos, diferentes tipos de servidores SMTP (con o sin autenticación de usuario), a la vez que da soporte a otras características de la función mail() nativa de PHP, pero de una manera un poco más simple.

Cuáles son sus funciones

Posee múltiples tipos de funciones prestablecidas para el envío de correo entre las que se destaca el uso de código HTML en el cuerpo del mensaje y archivos adjuntos. Puede acceder a varios ejemplos como así también a descargarlo desde su repositorio oficial en GitHub.

Algunas de las funciones que trae son:

  • Envíos a varios remitentes, con CC, CCO, etc.
  • Soporta 8bits, base64 y binarios
  • Autenticación por SMTP en puertos 25 sin encriptar, 587 TLS, 465 SSL
  • Envíos con HTML
  • Envíos de emails con adjuntos
  • Inclusión de imágenes en el correo, etc

Contenido

  1. Instalación.
    1. Descarga desde repositorio oficial.
    2. Subir los archivos al servidor.
  2. Ejemplo, envío mediante conexión a servidor SMTP

1. Instalación

Es realmente simple ya que es posible hacerlo tan sólo subiendo los archivos fuente al directorio httpdocs dentro de Plesk, que puede ser dentro de un subdirectorio con el nombre phpmailer y dentro colocar los archivos necesarios para utilizar esta clase a modo de complemento dentro del sitio desarrollado en php.

1.1 Descarga desde repositorio oficial

Acceder al repositorio publicado en GitHub, ingresar con su cuenta, caso contrario crear una nueva cuenta, lo cual habilita el botón Clone or download pertiéndonos así descargar los archivos fuente para luego subir al servidor.

1.2 Subir los archivos al servidor

Descomprimir el archivo .zip anteriormente descargado. Luego mediante Filezilla conectarse al servidor FTP de su dominio alojado en Plesk, crear un nuevo directorio dentro de httpdocs llamado phpmailer y subir allí dentro el contenido del archivo ya descomprimido de PHPMailer.

2. Ejemplo, envío mediante conexión a servidor SMTP

Crear un nuevo archivo con nombre phpmailer-smtp.php y copiar dentro el código citado a continuación, reemplazando midominio.tld, contraseñacorreo@midominio.tld por los valores que corresponda a su configuración. Luego el subject como body del mensaje puede utilizar el texto deseado para identificar fácilmente los mensajes provenientes desde este código de prueba.

Puede acceder a más códigos de ejemplo y detalles sobre su configuración consultando la documentación oficial.

<?php
/**
* This example shows making an SMTP connection with authentication.
*/
//Import the PHPMailer class into the global namespace
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

//Create a new PHPMailer instance
require './src/Exception.php';
require './src/PHPMailer.php';
require './src/SMTP.php';
$mail = new PHPMailer();
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// SMTP::DEBUG_OFF = off (for production use)
// SMTP::DEBUG_CLIENT = client messages
// SMTP::DEBUG_SERVER = client and server messages
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
//Set the hostname of the mail server
$mail->Host = 'mail.dominio.tld';
//Set the SMTP port number - likely to be 25, 465 or 587
$mail->Port = 25;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = 'correo@dominio.tld';
//Password to use for SMTP authentication
$mail->Password = 'contraseña';
//Set who the message is to be sent from
$mail->setFrom('correo@dominio.tld', 'Magic Mailer');
//Set an alternative reply-to address
$mail->addReplyTo('correo@dominio.tld', 'Magic');
//Set who the message is to be sent to
$mail->addAddress('mail@domain.tld', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer SMTP test';
$mail->Body = "Esta es una prueba de correo"; // Mensaje a enviar
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
//$mail->msgHTML(file_get_contents('contents.html'), __DIR__);
//Replace the plain text body with one created manually
//$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
//$mail->addAttachment('images/phpmailer_mini.png');

//send the message, check for errors
if (!$mail->send()) {
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message sent!';
}