微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

smtp.lua:80:尝试使用 lua 套接字发送电子邮件时尝试调用字段“b64”一个 nil 值

如何解决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() 函数,mimerequire "mime" 调用的结果(其中 mime 模块来自 luasocket 库)。除非 mime 模块本身有问题(如果它来自正确的来源并且安装正确,则不应该),它很可能是由 mime.lua 中某处可用的 package.path 文件引起的,所以它被加载而不是实际的模块。

如果您想进一步排除故障,只需在调试器中查看 require "mime" 的结果或使用 package.searchpath("mime",package.path) 查看正在拾取的内容 (searchpath);您可能还需要使用 package.cpath 进行尝试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。