我正在编写一个可以使用 LuaSocket SMTP 发送电子邮件的脚本。现在我想让我的脚本也能够阅读我的电子邮件。
我在支持 IMAP 的服务中有一个电子邮件帐户。
IMAP host and port: example.com:143
My E-Mail: doesnotexist@example.com
The password: notsaying
如何让我的脚本从该服务获取电子邮件以便显示其内容?
编辑:
我已经从https://github.com/vrld/imap4.lua尝试了 imap4,但似乎还没有完成。
我试过这个例子:
require 'luarocks.require'
local imap4 = require 'imap4'
local username = "doesnotexist@example.com"
local password = "notsaying"
local connection = imap4('example.com', 143)
print(table.concat(connection:capability(), ', '))
assert(connection:isCapable('IMAP4rev1'))
connection:login(username, password)
for mb, info in pairs(connection:lsub()) do
local stat = connection:status(mb, {'MESSAGES', 'RECENT', 'UNSEEN'})
print(mb, stat.MESSAGES, stat.RECENT, stat.UNSEEN)
end
local info = connection:examine('INBOX')
print(info.exist, info.recent)
for _,v in pairs(connection:fetch('UID BODY.PEEK[HEADER.FIELDS (From Date Subject)]', (info.exist-3)..':*')) do
print(v.id, v.UID, v.BODY.value)
end
connection:logout()
我只添加了用户名和密码,并从原始示例更改了服务器和端口,并将最新的从 4 更改为 3。我还删除了评论,因为它们很多。除了我没有修改任何其他内容之外,它基本上是相同的示例。
它似乎使用我的凭据以及正确的服务器和端口正确登录,但它有某种我无法调试的问题。
上面的示例输出:
IMAP4rev1, CHILDREN, NAMESPACE
INBOX.Sent 3 0 0
INBOX 4 0 0
4 0
lua: example.lua:24: attempt to index field 'BODY' (a nil value)
stack traceback:
example.lua:24: in main chunk
[C]: ?
它显示我的收件箱中有 4 封电子邮件,我的已发送电子邮件中有 3 封,这是正确的。