Software /
code /
prosody-modules
Diff
mod_email/mod_email.lua @ 3762:74d7e59b3511
mod_email: Initial prototype module that allows other modules to send email
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Fri, 13 Dec 2019 12:46:44 +0000 |
child | 3836:070faeaf51bc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_email/mod_email.lua Fri Dec 13 12:46:44 2019 +0000 @@ -0,0 +1,47 @@ +module:set_global(); + +local moduleapi = require "core.moduleapi"; + +local smtp = require"socket.smtp"; + +local config = module:get_option("smtp", { origin = "prosody", exec = "sendmail" }); + +local function send_email(to, headers, content) + if type(headers) == "string" then -- subject + headers = { + Subject = headers; + From = config.origin; + }; + end + headers.To = to; + headers["Content-Type"] = 'text/plain; charset="utf-8"'; + local message = smtp.message{ + headers = headers; + body = content; + }; + + if config.exec then + local pipe = io.popen(config.exec .. + " '"..to:gsub("'", "'\\''").."'", "w"); + + for str in message do + pipe:write(str); + end + + return pipe:close(); + end + + return smtp.send({ + user = config.user; password = config.password; + server = config.server; port = config.port; + domain = config.domain; + + from = config.origin; rcpt = to; + source = message; + }); +end + +assert(not moduleapi.send_email, "another email module is already loaded"); +function moduleapi:send_email(email) --luacheck: ignore 212/self + return send_email(email.to, email.headers or email.subject, email.body); +end