通过 message_id 从 imap 检索单个电子邮件

dag*_*da1 5 email imap

我正在使用 ruby​​ 的 Net::IMAP 对象,我可以使用以下任一方法检索一组电子邮件:

IMAP.all ..args..
Run Code Online (Sandbox Code Playgroud)

或者

IMAP.find ..args..
Run Code Online (Sandbox Code Playgroud)

但是无论如何都可以检索特定的电子邮件,例如最好通过 message-id 标头?

这是可能的还是我仅限于allfind试图用更好的参数缩小结果集?

Gig*_*igi 5

我不明白您在 IMAP 中使用的是什么技术。但是,IMAP 规范提供了按各种字段(包括电子邮件标题)进行搜索的能力。您可以使用以下 IMAP 命令检索带有 Message-Id 的电子邮件的 UID <53513DD7.8090606@imap.local>

0005 UID SEARCH HEADER Message-ID <53513DD7.8090606@imap.local>
Run Code Online (Sandbox Code Playgroud)

然后,这会给你一个响应,如下所示:

* SEARCH 1
0005 OK UID completed
Run Code Online (Sandbox Code Playgroud)

在我的例子中,带有 Message-Id 的电子邮件<53513DD7.8090606@imap.local>是第一个,所以 SEARCH 命令返回了一个匹配的 UID 1

然后,您可以使用UID FETCH命令检索消息,例如:

0006 UID FETCH 1 BODY[]
Run Code Online (Sandbox Code Playgroud)

当然,如果您事先知道 UID,则可以跳过该UID SEARCH步骤,但这取决于您的应用程序。