Thu, 19 Jan 2012 22:47:29 +0000
Initial commit
0 | 1 | dofile(assert(arg[1], "No config file specified")); |
2 | local config = assert(config, "No config!"); | |
3 | ||
4 | local beanstalk = require "beanstalk".new(); | |
5 | local smtp = require "socket.smtp"; | |
6 | local json = require "json"; | |
7 | ||
8 | local email_format = "%s <%s>"; | |
9 | ||
10 | beanstalk:connect(); | |
11 | ||
12 | -- A function that strips indentation and | |
13 | -- replaces $variables with entries from the data table. | |
14 | local function preprocess_message(data, message) | |
15 | local indentation = message:match("^%s*"); | |
16 | return (("\n"..message):gsub("\n"..indentation, "\n"):gsub("%$([%a_]+)", data):gsub("%s+$", "")); | |
17 | end | |
18 | ||
19 | ||
20 | repeat local job, err = beanstalk:reserve(); | |
21 | if not job then | |
22 | print("EE", err); | |
23 | else | |
24 | local data = json.decode(job.data); | |
25 | assert(smtp.send { | |
26 | from = email_format:format(config.from_name, config.from_address); | |
27 | rcpt = data.address; | |
28 | source = smtp.message { | |
29 | headers = { | |
30 | to = email_format:format(data.name or "", data.address); | |
31 | from = email_format:format(config.from_name, config.from_address); | |
32 | subject = config.subject; | |
33 | }; | |
34 | body = preprocess_message(data, config.message); | |
35 | }; | |
36 | user = config.smtp_username; | |
37 | password = config.smtp_password; | |
38 | server = config.smtp_server; | |
39 | port = config.smtp_port; | |
40 | }); | |
41 | end | |
42 | until false; |