mod_email/mod_email.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:41:15 +0100
changeset 5058 62480053c87b
parent 3840 070faeaf51bc
permissions -rw-r--r--
mod_cloud_notify_encrypted: Additional debug logging when enabling/skipping
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3766
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
module:set_global();
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local moduleapi = require "core.moduleapi";
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
local smtp = require"socket.smtp";
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
local config = module:get_option("smtp", { origin = "prosody", exec = "sendmail" });
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
local function send_email(to, headers, content)
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
	if type(headers) == "string" then -- subject
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
		headers = {
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
			Subject = headers;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
			From = config.origin;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
		};
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
	end
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
	headers.To = to;
3840
070faeaf51bc mod_email: Allow sender to override content-type
Matthew Wild <mwild1@gmail.com>
parents: 3766
diff changeset
    17
	if not headers["Content-Type"] then
070faeaf51bc mod_email: Allow sender to override content-type
Matthew Wild <mwild1@gmail.com>
parents: 3766
diff changeset
    18
		headers["Content-Type"] = 'text/plain; charset="utf-8"';
070faeaf51bc mod_email: Allow sender to override content-type
Matthew Wild <mwild1@gmail.com>
parents: 3766
diff changeset
    19
	end
3766
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
	local message = smtp.message{
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
		headers = headers;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
		body = content;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
	};
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
	if config.exec then
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
		local pipe = io.popen(config.exec ..
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
			" '"..to:gsub("'", "'\\''").."'", "w");
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
		for str in message do
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
			pipe:write(str);
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
		end
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
		return pipe:close();
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
	end
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
	return smtp.send({
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
		user = config.user; password = config.password;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
		server = config.server; port = config.port;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
		domain = config.domain;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
		from = config.origin; rcpt = to;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
		source = message;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
	});
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
end
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
assert(not moduleapi.send_email, "another email module is already loaded");
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
function moduleapi:send_email(email) --luacheck: ignore 212/self
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
	return send_email(email.to, email.headers or email.subject, email.body);
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
end