【问题标题】:Get UID for message from GMail using javax.mail with IMAP使用带有 IMAP 的 javax.mail 从 GMail 获取消息的 UID
【发布时间】:2010-09-18 04:10:57
【问题描述】:

我正在使用 javax.mail 通过 IMAP 从 GMail 中检索邮件。我还想获取应用于每封邮件的标签,因此我正在遍历商店中的所有文件夹(实际上是标签)并为彼此下载邮件。

我使用的是ImapFolder的getUID方法来获取每封邮件的UID,然后比较它们以识别不同文件夹中的相同邮件。

例如,如果我将邮件“Hello”标记为“A”和“B”,我将遍历文件夹“Inbox”、“A”和“B”,并从每个文件夹中获取相同的邮件;所以我可以保留一份标有“收件箱”、“A”和“B”的副本。

但是,getUID 方法返回的是一个相对于文件夹的 ID,因此同一封邮件可能在不同的文件夹中具有不同的 ID,或者不同的邮件在不同的文件夹中可能具有相同的 ID。在示例中。 “HellO”可能在“A”中显示为邮件 1,在“B”中显示为邮件 2。

有没有一种方法可以为每封邮件获取与存储相关的 id,而与文件夹无关?或者有更好的方法来获取附加到单个邮件的标签?

【问题讨论】:

    标签: java email gmail imap


    【解决方案1】:

    我认为唯一的方法是使用您根据消息头自己计算的哈希值。

    【讨论】:

    • 我认为它必须来,我想尽可能避免它,但似乎没有其他办法。顺便说一句,标头应包括主题、发件人、收件人、抄送、日期和...任何其他唯一标识邮件的内容?
    • 无论如何我都会包含 Message-ID 标头字段。
    • 想一想这样的情况:您在一个邮件组中,您收到一封邮件发送到该组,但发件人同时将邮件显式发送给您。然后你应该收到 2 封邮件,但 message-id 将是相同的,因为它是在发件人端发送的。抄送日期的主题也将相同,因此哈希将相同。为了区分,应该将 Delivered-To 添加到哈希中,在这种情况下它将区分两条消息。
    【解决方案2】:

    gmail forums 得到答案:有一个“message-id”标头包含我正在寻找的值。

    【讨论】:

    • Message-ID 在大多数情况下是唯一的,但并非在所有情况下都是唯一的。尤其是自动发件人通常会生成相同的 ID,或者您根本没有(我也见过空的 - Message-ID:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2014-08-19
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多