使用Spring Integration IMAP适配器,如何获取手动标记为“未读”的电子邮件?

Son*_*onu 5 java email spring imap spring-integration

我有一段代码,它使用spring集成的IMAP适配器轮询收件箱,以读取所有未读的电子邮件,并且可以正常工作。但是,如果我打开任何电子邮件,然后在Outlook收件箱中将其标记为“未读”,则轮询器不会获取标记的电子邮件。我可以使用pop3适配器来获取所有电子邮件,但是将其删除后记,但是我想将电子邮件保留在收件箱中,并且希望轮询器获取所有看不见的电子邮件。

有什么建议可以解决这个问题吗?我一直在搜索和阅读有关电子邮件适配器的文章,但没有发现任何有用的信息。

提前致谢。

Art*_*lan 4

看起来您需要自定义“搜索词策略”。来自 Spring Integration (SI) 文档:

默认情况下,ImapMailReceiver 将根据默认搜索词搜索邮件,即所有最近的邮件(如果支持)、未答复的邮件、未删除的邮件、未查看的邮件以及尚未由该邮件接收器处理的邮件(通过使用自定义用户标志启用,或者如果不支持则简单地“未标记”)。从版本 2.2 开始,ImapMailReceiver 使用的 SearchTerm 可以通过 SearchTermStrategy 进行完全配置,您可以通过 search-term-strategy 属性注入。SearchTermStrategy 是一个简单的策略接口,具有单一方法,允许您创建将由 ImapMailReceiver 使用的 SearchTerm 实例。

这是来自 SI 论坛的帖子,其中包含有趣的 Oleg 解释:服务器不支持 RECENT 或 USER 标志

在这里您可以找到 SI DefaultSearchTermStrategy:它是一个确定您应该如何实施自己的策略的地方。我猜,你的情况是:

此电子邮件服务器不支持 RECENT 标志,但它支持 USER 标志,该标志将用于防止电子邮件提取期间出现重复。

将 SI-mail 日志记录级别切换到 DEBUG 并查看哪个标志支持您的电子邮件服务器。