view mod_email/mod_email.lua @ 4430:71c495fa03f3

mod_groups_internal: allow force-emitting group member addition events This is useful when a new plugin was loaded which handles that event to add some value. Then the command can be called (**not** from the plugin but from an upcoming admin shell module) to synchronise things.
author Jonas Schäfer <jonas@wielicki.name>
date Fri, 05 Feb 2021 15:45:28 +0100
parents 070faeaf51bc
children
line wrap: on
line source

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;
	if not headers["Content-Type"] then
		headers["Content-Type"] = 'text/plain; charset="utf-8"';
	end
	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