【问题标题】:What is the difference between IMAPMessage.getUID() and Message-ID header?IMAPMessage.getUID() 和 Message-ID 标头有什么区别?
【发布时间】:2016-09-06 20:34:41
【问题描述】:

从 java 邮件的角度来看,这两者有什么区别?我可以看到特定消息的 2 个值不同。那么我应该如何考虑 IMAP 消息的唯一 ID?

如果我需要从 IMAP 服务器获取与唯一 ID 对应的消息,我应该使用吗?

MessageIDTerm

IMAPFolder.getMessageByUID()

【问题讨论】:

    标签: jakarta-mail imap


    【解决方案1】:

    UIDIMAP folder 中电子邮件的唯一标识号。文件夹中的每个邮件都分配有一个 uid,可以说是由邮件文件夹维护的索引。而message-id 是电子邮件的header 部分。

    简单来说, UID 是一个不能在文件夹中重复的唯一编号。如果我在一个文件夹中复制相同的电子邮件两次,每个邮件的标头都将具有相同的 message-id 但会有不同的 UID。

    其他主要区别是,

    • UID 由 imap 服务器分配
    • MessageId 由电子邮件设置 客户。

    因此,最好依靠 UID 来提取电子邮件。

    参考:RFC - UID

    【讨论】:

    • 请求 UID 也快得多:它是服务器的本机索引。搜索 Message-ID 标头可能会退化为对所有电子邮件的文本搜索。
    • true @Max,如果您搜索 Message-Id 标头,它将必须获取每封电子邮件的标头并在其中进行搜索。如果您的文件夹中有大量邮件,它该死的慢并且可能会加载服务器。
    • 如果邮件服务器重新启动、更新或在某些情况下,文件夹中邮件的 UID 可能会更改。要检测问题,应检查文件夹的 UIDVALIDTY。如果您在文件夹之间移动邮件,UID 值将被更改,而 MessageID 将被保留。
    • @benchpresser,UID 在服务器重启时不会改变。如果服务器面临一些数据损坏触发器,UID 会发生变化,而且现在这种情况很少发生。
    • @benchpresser 是的,如果移动邮件,UID 将会改变。 UID 是针对每个文件夹的,如果邮件从一个文件夹移动到另一个文件夹,它将被视为文件夹的新邮件,并会被分配一个可用于文件夹的下一个 uid。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2012-06-27
    • 2012-10-06
    相关资源
    最近更新 更多