Skip to content

Envío de email con SES de AWS

Introducción

Para enviar emails programáticamente, en PHP existen básicamente dos opciones:

  1. Usar el servidor de “sendmail” de la máquina donde corre el servidor HTTP que ejecuta nuestro aplicativo. En nuestro caso, no disponemos de tal servicio en nuestras máquinas.
  2. Usar un servicio SMTP (Simple Mail Transfer Protocol), con un usuario acreditado, para lo cual necesitaremos los credenciales del usuario en cuestión.
  • Bajo licencia GNU Lesser General Public License (Licencia Pública General para Bibliotecas de GNU), los programadores Andy Prevost, Marcus Bointon, Jim Jagieleski escribieron unas librerías para el envío de email con tres clases que implementan las funcionalidades de envío de email siguiendo la especificación del RFC 821 referente al protocolo SMTP.
  • Incluyo anexo zip con las citadas librerías. Para el envío de email SMTP, además de la Clase PHPMailer, necesitaremos incluir en la misma carpeta las clases SMTP y POP3.

Credenciales SES

  • El servicio SES de AWS, tiene usuario específico y sólo puede ser usado cuando el remitente (comando FROM del RFC 821 de la especificación) está en la lista de emails validados por dicho servicio.

Código

Copiamos las librerías en un directorio de nuestro proyecto y referenciamos

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once BASE_DIR.'/private/MAIL/src/PHPMailer.php';
require_once BASE_DIR.'/private/MAIL/src/SMTP.php';
  • Definimos las variables de control de errores
define("SEND_OK", 1);
define("SEND_KO", 0);
  • Instanciamos un objeto de la clase PHPMail
$sender = new PHPMailer();
  • Configuramos los parámetros de envío y enviamos el email. Lo ponemos en un bloque try para control de errores ya que es susceptible de múltiples fallos
try{
$sender->IsSMTP(); // telling the class to use SMTP
$sender->Host = SMTP_HOST;
$sender->Port = 587;
$sender->SMTPSecure = 'tls';
$sender->SMTPAuth = TRUE;
$sender->Username = SMTP_USR;
$sender->Password = SMTP_PASS;
$sender->SetFrom(<email_del_remitente>, <nombre_del_remitente>);
$sender->AddAddress(<email_del_destinatario>);
$sender->Subject = 'Certificado de asistencia';
$sender->AltBody = 'Para ver este mensaje, debe usar un correo compatible con HTML';
// Añadimos un archivo adjunto
$sender->AddAttachment(<path_del_archivo_en_disco>, <nombre_del_archivo);
$sender->MsgHTML(<texto_en_formato_html>);
$sender->Timeout = 2000;
if(!$this->mail->Send()) {
return SEND_KO;
}
$this->mail->SmtpClose();
return SEND_OK;
}
catch (phpmailerException $e) {
return SEND_KO;
}
catch (Exception $ex) {
return SEND_KO;
}
  • En este código, debes reemplazar email_del_remitente, nombre_del_remitente, email_del_destinatario, path_del_archivo_en_disco, nombre_del_archivo y texto_en_formato_html con los valores correspondientes.