我正在使用MailKit从Gmail帐户检索电子邮件。但是,我一直对电子邮件的ID感到困惑。
我已经查看了文档,但找不到完整的解释。
例如,我注意到UniqueId
,实际上并不是唯一的;我的意思是,如果我将电子邮件移动到特定文件夹并获取该电子邮件,它有一个 ID(例如 1)。然后,如果我从文件夹中删除该电子邮件并将其再次添加到文件夹中,它将获得其他 UniqueId(例如,2)!
当我尝试获取MessageSummaryItems.Id
时,我的电子邮件的值为空。
MessageSummaryItems.GMailMessageId
的值是一个很大的数字,我不知道它是否真的唯一分配给该电子邮件。
MessageSummaryItems.Envelope.MessageId
的值似乎是该电子邮件的全局唯一 ID。
我想了解更多有关这些 ID 的解释?
GMail 不支持OBJECTID
扩展,因此MessageSummaryItems.Id
永远不会得到任何东西(例如,返回的IMessageSummary.Id
将始终null
)。
MessageSummaryItems.Envelope.MessageId
是Message-Id
标头值。
MessageSummaryItems.GMailMessageId
是特定于 GMail 的标识符,与UniqueId
类似,但对于您的帐户而言是全局唯一的。
UniqueId
是唯一标识符,但特定于文件夹。换句话说,例如,INBOX
文件夹中UniqueId
5
的邮件将与Starred
文件夹中UniqueId
为5
的邮件不同。
但是,在 GMail 上,INBOX
中GMailMessageId
为5
的邮件将与Starred
文件夹中具有相同GMailMessageId
的邮件相同。它们都将引用完全相同的消息。
要了解为什么会这样,GMail 实际上只有 1 个文件夹 (All Mail
),您的所有消息都位于其中。您的所有其他文件夹,包括INBOX
、Drafts
、Sent
等,都只是All Mail
文件夹的虚拟视图,用于过滤掉所有没有相应 GMailLabel
的邮件。
因此,如果您向一组邮件添加标签,它们将显示在您的INBOX
中,并显示在与您刚刚创建的标签名称匹配的新文件夹中。