dofile(assert(arg[1], "No config file specified"));
local config = assert(config, "No config!");
local beanstalk = require "beanstalk".new();
local smtp = require "socket.smtp";
local json = require "json";
local email_format = "%s <%s>";
beanstalk:connect();
-- A function that strips indentation and
-- replaces $variables with entries from the data table.
local function preprocess_message(data, message)
local indentation = message:match("^%s*");
return (("\n"..message):gsub("\n"..indentation, "\n"):gsub("%$([%a_]+)", data):gsub("%s+$", ""));
end
repeat local job, err = beanstalk:reserve();
if not job then
print("EE", err);
else
local data = json.decode(job.data);
assert(smtp.send {
from = email_format:format(config.from_name, config.from_address);
rcpt = data.address;
source = smtp.message {
headers = {
to = email_format:format(data.name or "", data.address);
from = email_format:format(config.from_name, config.from_address);
subject = config.subject;
};
body = preprocess_message(data, config.message);
};
user = config.smtp_username;
password = config.smtp_password;
server = config.smtp_server;
port = config.smtp_port;
});
end
until false;