smtp: E-Mail mit NGINX senden
Installation
Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Dann können Sie mit den folgenden Schritten fortfahren.
CentOS/RHEL 7 oder 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-smtp
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-smtp
Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.
Dieses Dokument beschreibt lua-resty-smtp v0.0.3, veröffentlicht am 06. März 2015.
Ich muss verrückt sein, zu versuchen, E-Mails mit Nginx zu senden.
Zweck
Nginx als Brücke zwischen HTTP und SMTP zu machen.
Wenn Sie lua-resty-smtp in Ihrem Lua-Code unter Nginx verwenden, müssen Sie lediglich eine HTTP-Anfrage mit Ihrem praktischen HTTP-Client (curl, wget, urllib2 aus Python usw.) ausführen, um eine E-Mail an Ihren SMTP-Server zu senden.
Funktionen
-
Basierend auf dem Modul
socket.smtpvon LuaSocket 2.0.2 und API-kompatibel damit. -
SSL-Verbindung wird unterstützt (lua-nginx-lua >= v0.9.11 benötigt).
APIs
lua-resty-smtp ist API-kompatibel mit socket.smtp von LuaSocket 2.0.2, und Sie können SMTP für detaillierte Referenzen dazu überprüfen.
Um die SSL-Verbindung zum SMTP-Server zu unterstützen, wurde der optionale Parameter ssl hinzugefügt:
-
ssl: sollte eine Tabelle mit folgenden Feldern sein:-
enable- boolean - ob eine SSL-Verbindung zum SMTP-Server verwendet werden soll, Standardfalse; -
verify_cert- boolean - ob eine SSL-Verifizierung durchgeführt werden soll, Standardfalse. Wenn auftruegesetzt, wird das Serverzertifikat gemäß dem CA-Zertifikat verifiziert, das durch dielua_ssl_trusted_certificateDirektive angegeben ist.
-
Zusätzliche Filter
Neben den Low-Level-Filtern, die von LuaSocket bereitgestellt werden, werden zwei weitere Filter bereitgestellt:
-
mime.ew: wird verwendet, um nicht-ASCII-Zeichenfolgen in das Encoded-Word Format zu kodieren (unterstützt noch kein Q-encoding); -
mime.unew: wird verwendet, um Zeichenfolgen im Encoded-Word-Format zu dekodieren (nicht implementiert).
Beispiel
local config = require("config")
local smtp = require("resty.smtp")
local mime = require("resty.smtp.mime")
local ltn12 = require("resty.smtp.ltn12")
-- ...
-- Angenommen, Ihre E-Mail-Daten befinden sich in der Tabelle `args` und die Standardeinstellungen
-- in der Tabelle `config.mail`
-- ...
local mesgt = {
headers= {
subject= mime.ew(args.subject or config.mail.SUBJECT, nil,
{ charset= "utf-8" }),
["content-transfer-encoding"]= "BASE64",
["content-type"]= "text/plain; charset='utf-8'",
},
body= mime.b64(args.body)
}
local ret, err = smtp.send {
from= args.from or config.mail.FROM,
rcpt= rcpts,
user= args.user or config.mail.USER,
password= args.password or config.mail.PASSWORD,
server= args.server or config.mail.SERVER,
domain= args.domain or config.mail.DOMAIN,
source= smtp.message(mesgt),
}
Leistung
Ihr SMTP-Server ist der Engpass. :)
Bekannte Probleme
- Funktioniert derzeit nur mit LuaJIT 2.x, da der Code stark auf
pcallangewiesen ist und das lua-nginx-module in dieser Situation nicht gut mit der Standard-Lua 5.1 VM funktioniert. Siehe Bekannte Probleme.
GitHub
Sie finden zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-smtp.