如何解决smtp.lua:80:尝试使用 lua 套接字发送电子邮件时尝试调用字段“b64”一个 nil 值
所以我尝试使用带有 ssl 的 luasocket smtp 函数发送电子邮件,但由于某种原因我收到此错误 /usr/local/share/lua/5.1/socket/smtp.lua:80: attempt to call field 'b64' (a nil value)
我已下载所有库,但我不知道为什么它不起作用。
这是我的代码
local smtp = require("socket.smtp")
local ssl = require('ssl')
local https = require 'ssl.https'
local mime = require("mime")
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
local k,e = smtp.send{
from = "[REDACTED]",rcpt = self.params.email,user = "[REDACTED]",password = "[REDACTED]",port = 465,server = "smtp.gmail.com",source = smtp.message(message),create = sslCreate
}
if not k then
print(e)
end
解决方法
第 80 行的代码调用 mime.b64()
函数,mime
是 require "mime"
调用的结果(其中 mime 模块来自 luasocket 库)。除非 mime 模块本身有问题(如果它来自正确的来源并且安装正确,则不应该),它很可能是由 mime.lua
中某处可用的 package.path
文件引起的,所以它被加载而不是实际的模块。
如果您想进一步排除故障,只需在调试器中查看 require "mime"
的结果或使用 package.searchpath("mime",package.path)
查看正在拾取的内容 (searchpath);您可能还需要使用 package.cpath
进行尝试。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。