Annotate

mod_email/mod_email.lua @ 3772:22f02716819f

mod_s2s_keepalive: Isolate source host of pings The incoming_s2s table is not restricted to the current virtualhost so this prevents opening more connections than what's needed. Also prevents useless double sending of one whitespace per local host.
author Kim Alvefur <zash@zash.se>
date Mon, 23 Dec 2019 01:18:02 +0100
parent 3762:74d7e59b3511
child 3836:070faeaf51bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3762
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