mail: Высокоуровневая, простая в использовании и неблокирующая библиотека для работы с электронной почтой и SMTP для nginx-module-lua
Установка
Если вы еще не подписались на репозиторий RPM, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.
CentOS/RHEL 7 или 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
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что установлен nginx-module-lua.
Этот документ описывает lua-resty-mail v1.1.0, выпущенную 23 сентября 2023 года.
Высокоуровневая, простая в использовании и неблокирующая библиотека для работы с электронной почтой и SMTP для OpenResty.
Особенности
- Поддержка SMTP-аутентификации, STARTTLS и SSL.
- Многочастные текстовые и HTML-сообщения.
- Поля From, To, Cc, Bcc, Reply-To и Subject (также поддерживаются пользовательские заголовки).
- Электронные адреса в форматах "test@example.com" и "Name <test@example.com>".
- Вложения файлов.
Использование
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 = "Pizza is here!",
text = "There's pizza in the sewer.",
html = "<h1>There's pizza in the sewer.</h1>",
attachments = {
{
filename = "toppings.txt",
content_type = "text/plain",
content = "1. Cheese\n2. Pepperoni",
},
},
})
if err then
ngx.log(ngx.ERR, "mailer:send error: ", err)
return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
end
API
new
синтаксис: mailer, err = mail.new(options)
Создает и возвращает новый объект почты. В случае ошибок возвращает nil и строку, описывающую ошибку.
Таблица options принимает следующие поля:
host: Хост SMTP-сервера, к которому нужно подключиться. (по умолчанию:localhost)port: Номер порта на SMTP-сервере, к которому нужно подключиться. (по умолчанию:25)starttls: Установите вtrue, чтобы гарантировать, что STARTTLS всегда используется для шифрования связи с SMTP-сервером. Если не установлено, STARTTLS будет автоматически включен, если сервер его поддерживает (но предпочтительно явно установить это в true, если ваш сервер его поддерживает, чтобы предотвратить атаки STRIPTLS). Обычно используется вместе с портом 587. (по умолчанию:nil)ssl: Установите вtrue, чтобы использовать SMTPS для шифрования связи с SMTP-сервером (не требуется, если используется STARTTLS). Обычно используется вместе с портом 465. (по умолчанию:nil)username: Имя пользователя для аутентификации SMTP. (по умолчанию:nil)password: Пароль для аутентификации SMTP. (по умолчанию:nil)auth_type: Тип аутентификации SMTP, который нужно выполнить. Может бытьplainилиlogin. (по умолчанию:plain, если указаны имя пользователя и пароль)domain: Имя домена, представленное SMTP-серверу во время соединенияEHLOи используемое как часть заголовка Message-ID. (по умолчанию:localhost.localdomain)ssl_verify: Необходимо ли выполнять проверку сертификата сервера, когда включеныsslилиstarttls. Если это включено, потребуется настроитьlua_ssl_trusted_certificate. (по умолчанию:false)ssl_host: Если имя хоста сертификата сервера отличается от параметраhost, это значение можно использовать для указания другого хоста, используемого для SNI и проверки TLS, когда включеныsslилиstarttls. (по умолчанию: значение параметраhost)timeout_connect: Таймаут (в миллисекундах) для подключения к SMTP-серверу. (по умолчанию: глобальный таймаутlua_socket_connect_timeoutOpenResty, который по умолчанию составляет 60 секунд)timeout_send: Таймаут (в миллисекундах) для отправки данных на SMTP-сервер. (по умолчанию: глобальный таймаутlua_socket_send_timeoutOpenResty, который по умолчанию составляет 60 секунд)timeout_read: Таймаут (в миллисекундах) для чтения данных с SMTP-сервера. (по умолчанию: глобальный таймаутlua_socket_read_timeoutOpenResty, который по умолчанию составляет 60 секунд)
mailer:send
синтаксис: ok, err = mailer:send(data)
Отправляет электронное письмо через SMTP-сервер. Эта функция возвращает true при успешном выполнении. В случае ошибок возвращает nil и строку, описывающую ошибку.
Таблица data принимает следующие поля:
from: Электронный адрес для заголовкаFrom.reply_to: Электронный адрес для заголовкаReply-To.to: Таблица (похожая на список) электронных адресов для получателейTo.cc: Таблица (похожая на список) электронных адресов для получателейCc.bcc: Таблица (похожая на список) электронных адресов для получателейBcc.subject: Тема сообщения.text: Тело сообщения (версия в обычном тексте).html: Тело сообщения (HTML версия).headers: Таблица дополнительных заголовков, которые нужно установить в сообщении.attachments: Таблица (похожая на список) вложений файлов для сообщения. Каждое вложение должно быть таблицей (похожей на карту) со следующими полями:filename: Имя файла вложения.content_type:Content-Typeфайла вложения.content: Содержимое файла вложения в виде строки.disposition:Content-Dispositionфайла вложения. Может бытьattachmentилиinline. (по умолчанию:attachment)content_id:Content-IDфайла вложения. (по умолчанию: случайно сгенерированный ID)
Разработка
После клонирования репозитория можно использовать Docker для запуска тестового набора:
docker-compose run --rm app make test
Процесс выпуска
Чтобы выпустить новую версию для LuaRocks и OPM:
- Убедитесь, что
CHANGELOG.mdактуален. - Обновите
_VERSIONвlib/resty/mail.lua. - Обновите
versionвdist.ini. - Переместите файл rockspec на новый номер версии (
git mv lua-resty-mail-X.X.X-1.rockspec lua-resty-mail-X.X.X-1.rockspec), и обновите переменныеversionиtagв файле rockspec. - Зафиксируйте и тегируйте выпуск (
git tag -a vX.X.X -m "Tagging vX.X.X" && git push origin vX.X.X). - Запустите
make release VERSION=X.X.X.
GitHub
Вы можете найти дополнительные советы по настройке и документацию для этого модуля в репозитории GitHub для nginx-module-mail.