Вопрос по email, lua – Луа отправить письмо с учетной записью Gmail
Я хочу отправить письмо с моей учетной записью Gmail, я попробовал, но не повезло, так кто-нибудь может дать мне образец? Мы ценим любые предложения. Спасибо
Я использовал API-интерфейс lualogging, код
require"logging.email"
logger = logging.email {
rcpt = "[email protected]",
from = "[email protected]",
user = "[email protected]",
password = *****,
server = "smtp.gmail.com",
port = 587,
headers = {
rcpt = "[email protected]",
from = "[email protected]",
subject = "[%level] logging.email test",
},
}
logger:error("error!")
Код от Michal Kottman работает должным образом, но он не работает (для меня), когда сервер smpt работает на порту 587, используя совершенно другой способ приема почты для отправки (согласно тому, что я прочитал). Кто-нибудь сталкивался с чем-нибудь подобным? Я всегда получаю "неправильный номер версии" на сервере работает через порт 587.
Вы должны посмотреть наLuaSocketособенно егоSMTP модуль который может быть использован для отправки почты с использованием вашей учетной записи GMail. Вам также нужна библиотека SSL, я используюLuaSec который был разработан для использования вместе с LuaSocket. Это код, который я успешно использовал для отправки писем с использованием моей учетной записи GMail:
-- Michal Kottman, 2011, public domain
local socket = require 'socket'
local smtp = require 'socket.smtp'
local ssl = require 'ssl'
local https = require 'ssl.https'
local ltn12 = require 'ltn12'
function 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
function sendMessage(subject, body)
local msg = {
headers = {
to = 'Your Target <target email>',
subject = subject
},
body = body
}
local ok, err = smtp.send {
from = '<your email>',
rcpt = '<target email>',
source = smtp.message(msg),
user = 'username',
password = 'password',
server = 'smtp.gmail.com',
port = 465,
create = sslCreate
}
if not ok then
print("Mail send failed", err) -- better error handling required
end
end