IMAP,使用消息ID跟踪移动的消息

时间:2015-10-19 13:56:51

标签: java email imap move messageid

我们正在开发一个用Java编写的邮件客户端。它具有与Outlook或Thunderbird等相同的功能。它直接与邮件服务器通信。此外,我们的业务规则要求我们将所有消息存储在数据库中,并且消息应始终保持同步。我知道这不适合IMAP,但我们必须保留数据库中的所有内容。 问题出现了,如何跟踪从文件夹A移动到文件夹B 的IMAP邮件?我们怎样才能了解这一点?如果从A中删除消息,它将从A中删除,并在B中新创建,结果:消息的UID值已更改。我们可以依赖标题中的MessageID吗?我检查了一些邮件服务器,看到标题中的邮件ID保持不变。但我已经在某处读过,根据邮件服务器,messageid可能是空的。

  • 标题中的MessageID是否始终设置,可以是将它们留空的案例或邮件服务器吗?
  • 标题中的MessageID值在IMAP文件夹中是唯一的吗?
  • 移动邮件或更改文件夹UIDVALIDITY时是否可能更改?
  • 如何在抓取期间设置自定义标头?当我添加非标准头名称值对时,它是保留在邮件服务器上还是邮件服务器可能会删除非标准邮件列表?应用非标准头值是不是一个坏主意?

    notifyDataSetChanged()
  • 在stackoverflow中有一些建议,据说生成一个包含messageId的哈希和其他参数,如发送者,主题等,这是一种安全的方法吗?如果没有提供唯一的MessageID或者没有提供MessageID,我们可能会遇到冲突。

1 个答案:

答案 0 :(得分:0)

你可以做三件事。

首先是message-id。如果你的失败模式足够好,你可以依赖现在的消息ID和唯一的。在您的情况下,如果不存在message-id并且移动了消息,那么您是否在数据库中浪费空间和/或下载消息两次失败?这些天浪费的空间会很小。

第二,x-gm-msgid。这是一个特定于Gmail的功能,一个永不改变的63位数字。如果两个消息具有相同的x-gm-msgid,则它们是相同的。

第三,COPYUID响应代码会告诉您有关移动的信息,但仅适用于移动时,而不适用于其他人移动时。

总之,这些应该可以让您更好地了解用户邮箱的变化。