54 lines
1.3 KiB
Lua
54 lines
1.3 KiB
Lua
require("net.identity")
|
|
net:registerModule("email",{1,0,0})
|
|
smtp = require 'socket.smtp'
|
|
ssl = require 'ssl'
|
|
|
|
function net.email.init(from,user,pass)
|
|
net.OnServerCreated:connect(function(s)
|
|
s.from=from
|
|
s.user=user
|
|
s.pass=pass
|
|
function s:sendMessage(subject, body, dTable)
|
|
local msg = {
|
|
headers = {
|
|
from = '<'..dTable.email..'>'
|
|
to = dTable.nick..' <'..dTable.email..'>',
|
|
subject = subject
|
|
},
|
|
body = body
|
|
}
|
|
local ok, err = smtp.send {
|
|
from = '<'..self.from..'>',
|
|
rcpt = '<'..dTable.email..'>',
|
|
source = smtp.message(msg),
|
|
user = self.user,
|
|
password = self.pass,
|
|
server = 'smtp.gmail.com',
|
|
port = 465,
|
|
create = net.sslCreate
|
|
}
|
|
if not ok then
|
|
print("Mail send failed", err) -- better error handling required
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
function net.sslCreate()
|
|
local sock = socket.tcp()
|
|
return setmetatable({
|
|
connect = function(_, host, port)
|
|
local r, e = sock:connect(host, port)
|
|
if not r then return r, e end
|
|
sock = ssl.wrap(sock, {mode='client', protocol='tlsv1'})
|
|
return sock:dohandshake()
|
|
end
|
|
}, {
|
|
__index = function(t,n)
|
|
return function(_, ...)
|
|
return sock[n](sock, ...)
|
|
end
|
|
end
|
|
})
|
|
end
|
|
|