gpt4 book ai didi

ruby-on-rails - 仅从 IMAP 服务器获取新邮件

转载 作者:数据小太阳 更新时间:2023-10-29 06:32:49 26 4
gpt4 key购买 nike

我正在编写一个客户端应用程序,它从 IMAP 服务器获取电子邮件,然后将它们存储在数据库中。问题是,一旦我检查了邮件,下次我只想下载此后到达的邮件。因此,如果我在两个小时前检查了服务器的邮件,我只想获取最近两个小时内到达的邮件。

我可以将 SEARCH 与 SINCE DATE 一起使用,但不支持时间 + 日期,很容易被欺骗。

我也尝试了 RECENT 标志,但这似乎不适用于 gmail(在 ruby​​ 中它每次都显示 nil)。

最佳答案

您想为消息使用 UniqueId (UID)。这就是创建它的具体原因。

您需要跟踪上次请求的 UID,然后使用消息集“[UID]:*”请求所有新消息,其中 [UID] 是实际的 UID 值。

例如,假设最后一条消息 feteched 的唯一 ID 为“123456”。你会获取

123456:*

然后,丢弃第一个返回的消息。

UID 在 session 中“应该”是稳定的,永远不会改变,并且总是增加值。验证这一点的关键是在选择文件夹时检查 UIDValidity。如果 UIDValidity 数字没有改变,那么 UID 应该在整个 session 中仍然有效。

以下是 RFC 中的相关部分:

2.3.1.1。唯一标识符 (UID) 消息属性

分配给每条消息的 32 位值,当与 唯一标识符有效性值(见下文)形成一个 64 位值 不得引用邮箱中的任何其他消息或任何 后续邮箱永远同名。唯一标识符 在邮箱中以严格升序分配;作为每个 消息被添加到邮箱,它被分配了一个比 之前添加的消息。不同于消息序列 数字,唯一标识符不一定是连续的。

消息的唯一标识符不得在 session ,并且不应在 session 之间更改。的任何变化 session 之间的唯一标识符必须使用 下面讨论 UIDVALIDITY 机制。持久唯一标识符 客户端需要从以前的状态重新同步它的状态 与服务器的 session (例如,断开连接或离线访问 客户);这将在 [IMAP-DISC] 中进一步讨论。

注意:下一个唯一标识符值旨在 为客户提供一种方法来确定是否有 邮件已发送到邮箱,因为 上一次它检查了这个值。

这是包含更多信息的链接:

http://www.faqs.org/rfcs/rfc3501.html

我会做的,也是跟踪下载消息的内部日期。这样,如果您丢失了 UID 同步,您至少可以遍历消息,并根据消息的 InternalDate 找到您下载的最后一个消息。

关于ruby-on-rails - 仅从 IMAP 服务器获取新邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com