Como enviar emails con PHP usando PHPMailer

08/08/2019 | PHP | 3 comentarios

Aprende a enviar correos electrónicos en PHP usando PHPMailer. Esta guía paso a paso te muestra cómo configurar y enviar emails de manera eficiente y segura.

Descargar archivos


PHP ofrece el método mail() para enviar correos, el problema es que este método utiliza el servidor de correo local que no requiere autenticación por lo cual estos correos son marcados como SPAM. La manera correcta de enviar correos es usando un servidor SMTP (Simple Mail Transfer Protocol), estos servidores necesitan autenticar al usuario que va a enviar el correo y evitar el envío de SPAM.

Requisitos Previos

Antes de comenzar, asegúrate de tener lo siguiente:

  • Un servidor web con PHP instalado.
  • Acceso a un servidor SMTP (como Gmail, SendGrid, Amazon SES, etc.).
  • Composer instalado en tu sistema para gestionar dependencias.

PHPMailer

PHPMailer es un componente o librería PHP que permite enviar correos que incluye muchas opciones de configuración entre ellas la posibilidad de usar servidores SMTP.

Instalar PHPMailer

Empecemos agregando PHPMailer a nuestro proyecto utilizando Composer, para ello ejecutamos en línea de comandos:

composer require phpmailer/phpmailer

Configurar PHPMailer

El siguiente paso es inicializar PHPMailer, creamos un archivo PHP, importamos la librería usando el autoload.php y creamos una instancia de la clase.


<?php
// file: mail.php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require_once __DIR__ . '/vendor/autoload.php';

$mail = new PHPMailer(true);

Lo siguiente es configurar PHPMailer y envíar correo usando el método send(), de la siguiente manera:


// Configure PHPMailer
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

// Configure SMTP Server
$mail->Host = 'smtp.domain.com';
$mail->Username = 'username@domain.com';
$mail->Password = 'xxxxxxxx';

// Configure Email
$mail->setFrom('username@domain.com', 'Name');
$mail->addAddress('tousername@domain.com');
$mail->Subject = 'PHPMailer SMTP';
$mail->isHTML(true);
$mail->Body = 'This is the HTML message body in bold!';

// send mail
$mail->Send();

Hemos utilizado las siguientes propiedades de PHPMailer:

  • Host: Especifica la dirección del servidor SMTP.
  • Username: Nombre de usuario para autenticarse en el SMTP.
  • Password: Contraseña para autenticarse en el SMTP.
  • Subject: Define el asunto del correo.
  • Body: Es el cuerpo del correo o mensaje que se quiere enviar.

Además de los siguientes métodos de PHPMailer:

  • setFrom(): método para definir el remitente del correo.
  • addAddress(): método para agregar el destinatario del correo.
  • send(): método para enviar el correo.

Finalmente unimos todo el código y capturamos algún error con try ... catch, con lo que tenemos el código completo para enviar correo con PHP.


<?php
// file: mail.php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require_once __DIR__ . '/vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    // Configure PHPMailer
    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;

    // Configure SMTP Server
    $mail->Host = 'smtp.domain.com';
    $mail->Username = 'username@domain.com';
    $mail->Password = 'xxxxxxxx';

    // Configure Email
    $mail->setFrom('username@domain.com', 'Name');
    $mail->addAddress('tousername@domain.com');
    $mail->Subject = 'PHPMailer SMTP';
    $mail->isHTML(true);
    $mail->Body = 'This is the HTML message body in bold!';

    // send mail
    $mail->Send();
    echo 'Message has been sent using SMTP Server';
} catch (Exception $e) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
}

Para utilizar este código debes colocar los datos de tu servidor SMTP, usuario y clave. Luego vienen los datos del correo: asunto, destinatario y cuerpo del mensaje.

Configuraciones Adicionales

Añadir Archivos Adjuntos

Para añadir archivos adjuntos usa el método addAttachment:

$mail->addAttachment('/path/filename.pdf');

Enviar a Múltiples Destinatarios

Para enviar el correo a múltiples destinatarios, agrega más direcciones con addAddress:


$mail->addAddress('touser_01@example.com');
$mail->addAddress('touser_02@example.com');

Enviar correos en copia

Se puede enviar copiar del corre con addCC y addBCC:


$mail->addCC('touser_03@example.com');
$mail->addBCC('touser_04@example.com');

Recomendaciones

Existe la posibilidad que los correos enviados con este método sea marcados como SPAM, esto puede ocurrir por las siguientes razones:

  • La dirección del remitente no coincide con el usuario del SMTP.
  • El servidor SMTP utilizado esta registrado en una lista negra de spammers.
  • El subject esta vacío o contiene palabras consideradas como spam.

Evita estos errores no tendrás problemas con el envío de correos.

Referencias

Comentarios

David 25/07/2020 10:26 pm

hola podria enviarme el codigo ya listo no se como usar composer solo utilizo sublime txt

kodetop 25/07/2020 11:57 pm

Hola David, lo ideal es que instales Composer para que puedas usar este y otros ejemplos, para ello puedes leer: Componentes PHP y como usarlos con Composer que contiene una guía para entender e instalar composer.

De todas maneras te adjunto el link de descarga que ya incluye las dependencias de composer para que lo puedas usar directamente:

https://www.kodetop.com/downloads/phpmailer-samples-vendors.zip

Samuel 22/08/2020 9:39 pm

Muchas gracias! me fue muy útil la información aquí publicada.

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>