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