mod_email/mod_email.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 13 Dec 2019 12:46:44 +0000
changeset 3766 74d7e59b3511
child 3840 070faeaf51bc
permissions -rw-r--r--
mod_email: Initial prototype module that allows other modules to send email
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;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
	headers["Content-Type"] = 'text/plain; charset="utf-8"';
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
	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
    19
		headers = headers;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
		body = content;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
	};
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
	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
    24
		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
    25
			" '"..to:gsub("'", "'\\''").."'", "w");
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
		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
    28
			pipe:write(str);
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
		end
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
		return pipe:close();
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
	end
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
	return smtp.send({
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
		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
    36
		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
    37
		domain = config.domain;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
		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
    40
		source = message;
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
	});
74d7e59b3511 mod_email: Initial prototype module that allows other modules to send email
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
end
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
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
    45
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
    46
	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
    47
end