mail: Una biblioteca de correo electrónico y SMTP de alto nivel, fácil de usar y no bloqueante para nginx-module-lua
Instalación
Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.
CentOS/RHEL 7 o Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-mail
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-mail
Para usar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.
Este documento describe lua-resty-mail v1.2.0 lanzado el 04 de febrero de 2026.
Una biblioteca de correo electrónico y SMTP de alto nivel, fácil de usar y no bloqueante para OpenResty.
Características
- Autenticación SMTP, soporte para STARTTLS y SSL.
- Cuerpos de mensajes en texto plano y HTML multipart.
- Campos From, To, Cc, Bcc, Reply-To y Subject (también se admiten encabezados personalizados).
- Direcciones de correo electrónico en formatos "test@example.com" y "Nombre <test@example.com>".
- Archivos adjuntos.
Uso
local mail = require "resty.mail"
local mailer, err = mail.new({
host = "smtp.gmail.com",
port = 587,
starttls = true,
username = "[email protected]",
password = "password",
})
if err then
ngx.log(ngx.ERR, "mail.new error: ", err)
return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
local ok, err = mailer:send({
from = "Master Splinter <[email protected]>",
to = { "[email protected]" },
cc = { "[email protected]", "Raphael <[email protected]>", "[email protected]" },
subject = "¡La pizza ha llegado!",
text = "Hay pizza en la alcantarilla.",
html = "<h1>Hay pizza en la alcantarilla.</h1>",
attachments = {
{
filename = "toppings.txt",
content_type = "text/plain",
content = "1. Queso\n2. Pepperoni",
},
},
})
if err then
ngx.log(ngx.ERR, "mailer:send error: ", err)
return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
API
new
sintaxis: mailer, err = mail.new(options)
Crea y devuelve un nuevo objeto de correo. En caso de errores, devuelve nil y una cadena que describe el error.
La tabla options acepta los siguientes campos:
host: El host del servidor SMTP al que conectarse. (predeterminado:localhost)port: El número de puerto en el servidor SMTP al que conectarse. (predeterminado:25)starttls: Establecer entruepara asegurar que STARTTLS se utilice siempre para cifrar la comunicación con el servidor SMTP. Si no se establece, STARTTLS se habilitará automáticamente si el servidor lo admite (pero establecer esto explícitamente en verdadero si tu servidor lo admite es preferible para prevenir ataques STRIPTLS). Esto se utiliza generalmente junto con el puerto 587. (predeterminado:nil)ssl: Establecer entruepara usar SMTPS para cifrar la comunicación con el servidor SMTP (no es necesario si se está utilizando STARTTLS en su lugar). Esto se utiliza generalmente junto con el puerto 465. (predeterminado:nil)username: Nombre de usuario para usar en la autenticación SMTP. (predeterminado:nil)password: Contraseña para usar en la autenticación SMTP. (predeterminado:nil)auth_type: El tipo de autenticación SMTP a realizar. Puede serplainologin. (predeterminado:plainsi se presentan nombre de usuario y contraseña)domain: El nombre de dominio presentado al servidor SMTP durante la conexiónEHLOy utilizado como parte del encabezado Message-ID. (predeterminado:localhost.localdomain)ssl_verify: Si se debe o no realizar la verificación del certificado del servidor cuando se habilitasslostarttls. Si esto está habilitado, será necesario configurar la opciónlua_ssl_trusted_certificate. (predeterminado:false)ssl_host: Si el nombre del host del certificado del servidor es diferente al de la opciónhost, esta configuración se puede usar para especificar un host diferente utilizado para la verificación de SNI y TLS cuando se habilitasslostarttls. (predeterminado: el valor de la opciónhost)timeout_connect: El tiempo de espera (en milisegundos) para conectarse al servidor SMTP. (predeterminado: tiempo de espera globallua_socket_connect_timeoutde OpenResty, que por defecto es 60s)timeout_send: El tiempo de espera (en milisegundos) para enviar datos al servidor SMTP. (predeterminado: tiempo de espera globallua_socket_send_timeoutde OpenResty, que por defecto es 60s)timeout_read: El tiempo de espera (en milisegundos) para leer datos del servidor SMTP. (predeterminado: tiempo de espera globallua_socket_read_timeoutde OpenResty, que por defecto es 60s)
mailer:send
sintaxis: ok, err = mailer:send(data)
Envía un correo electrónico a través del servidor SMTP. Esta función devuelve true en caso de éxito. En caso de errores, devuelve nil y una cadena que describe el error.
La tabla data acepta los siguientes campos:
from: Dirección de correo electrónico para el encabezadoFrom.reply_to: Dirección de correo electrónico para el encabezadoReply-To.to: Una tabla (tipo lista) de direcciones de correo electrónico para los destinatariosTo.cc: Una tabla (tipo lista) de direcciones de correo electrónico para los destinatariosCc.bcc: Una tabla (tipo lista) de direcciones de correo electrónico para los destinatariosBcc.subject: Asunto del mensaje.text: Cuerpo del mensaje (versión de texto plano).html: Cuerpo del mensaje (versión HTML).headers: Una tabla de encabezados adicionales para establecer en el mensaje.attachments: Una tabla (tipo lista) de archivos adjuntos para el mensaje. Cada archivo adjunto debe ser una tabla (tipo mapa) con los siguientes campos:filename: El nombre del archivo del adjunto.content_type: ElContent-Typedel archivo adjunto.content: El contenido del archivo adjunto como una cadena.disposition: ElContent-Dispositiondel archivo adjunto. Puede serattachmentoinline. (predeterminado:attachment)content_id: ElContent-IDdel archivo adjunto. (predeterminado: ID generado aleatoriamente)
Desarrollo
Después de clonar el repositorio, se puede usar Docker para ejecutar la suite de pruebas:
docker-compose run --rm app make test
Proceso de Lanzamiento
Para lanzar una nueva versión en LuaRocks y OPM:
- Asegúrate de que
CHANGELOG.mdesté actualizado. - Actualiza el
_VERSIONenlib/resty/mail.lua. - Actualiza la
versionendist.ini. - Mueve el archivo rockspec al nuevo número de versión (
git mv lua-resty-mail-X.X.X-1.rockspec lua-resty-mail-X.X.X-1.rockspec), y actualiza las variablesversionytagen el archivo rockspec. - Realiza un commit y etiqueta el lanzamiento (
git tag -a vX.X.X -m "Tagging vX.X.X" && git push origin vX.X.X). - Ejecuta
make release VERSION=X.X.X.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-mail.