# HG changeset patch # User Matthew Wild # Date 1576241204 0 # Node ID 74d7e59b351100f274c7fe0e131f6e7601c6fad0 # Parent 0ae28bf0c5469307793aed7e7f5d0fee44315430 mod_email: Initial prototype module that allows other modules to send email diff -r 0ae28bf0c546 -r 74d7e59b3511 mod_email/mod_email.lua --- /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