我们正在开发用Java编写的邮件客户端。它具有相同的功能,如Outlook或Thunderbird等,它直接与邮件服务器通信。另外,我们的业务规则要求我们将所有消息存储在数据库中,并且消息应始终保持同步。我知道这不是非常适合IMAP,但我们必须将所有内容都保存在我们的数据库中。 问题出现,如何跟踪从文件夹A移动到文件夹B的IMAP消息?我们怎样才能得到有关的信息?如果您从A中删除消息,则它将从A中删除,并在B中新创建,结果如下:消息的UID值被更改。我们可以依靠头中的MessageID吗?我检查了一些邮件服务器,看到标题中的消息ID保持不变。但是我已经阅读过某个地方,根据邮件服务器的不同,messageids可以是空的。IMAP,使用消息ID跟踪移动的消息
- 标题中的MessageID是否始终设置,可以是情况下还是邮件服务器,它们将其保留为空?
- 头文件中的MessageID值在IMAP文件夹中是唯一的吗?
- 当邮件被移动或文件夹UIDVALIDITY更改时,它可能会被更改吗?
如何在提取期间设置自定义标题?当我添加一个非标准标题名称值对时,它是否会保留在邮件服务器上,或者邮件服务器可能会删除非标准邮件标题对象?应用非标准标题值是不是一个好主意?
IMAPMessage m; m.setHeader("myHeader", "myValue");
有计算器中的一些建议,据说这是产生包括邮件ID以及其他参数如发件人哈希,主题等,是一种安全的方法?如果没有唯一的MessageID,或者没有提供MessageID,我们可以发生冲突。
不,你不能指望独特的或存在的messageids。由于imap消息是不可变的,所以不能添加标题。 – Max
最好的办法就是和你在最后提到的建议一起去 - 创建一个包含发送者,接收者,主题,日期和尽可能多其他独特字段的散列。 – Fallso
并且要小心,创建消息副本非常简单(例如,IMAP COPY命令),因此即使所有这些仍然会导致重复。消息本身并不是唯一的。 – Max