|
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; |