Annotate

mod_email/mod_email.lua @ 5173:460f78654864

mod_muc_rtbl: also filter messages This was a bit tricky because we don't want to run the JIDs through SHA256 on each message. Took a while to come up with this simple plan of just caching the SHA256 of the JIDs on the occupants. This will leave some dirt in the occupants after unloading the module, but that should be ok; once they cycle the room, the hashes will be gone. This is direly needed, otherwise, there is a tight race between the moderation activities and the actors joining the room.
author Jonas Schäfer <jonas@wielicki.name>
date Tue, 21 Feb 2023 21:37:27 +0100
parent 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;
3836
070faeaf51bc mod_email: Allow sender to override content-type
Matthew Wild <mwild1@gmail.com>
parents: 3762
diff changeset
17 if not headers["Content-Type"] then
070faeaf51bc mod_email: Allow sender to override content-type
Matthew Wild <mwild1@gmail.com>
parents: 3762
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: 3762
diff changeset
19 end
3762
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