Changeset

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
parents 3761:0ae28bf0c546
children 3763:f384669a9359
files mod_email/mod_email.lua
diffstat 1 files changed, 47 insertions(+), 0 deletions(-) [+]
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