我有一段代码,它使用 spring 集成的 IMAP 适配器来轮询收件箱以阅读所有未读的传入电子邮件,并且效果很好。但是,如果我打开任何电子邮件,然后在我的 Outlook 收件箱中将其标记为“未读”,则轮询器不会获取标记的电子邮件。我可以使用 pop3 适配器来获取所有电子邮件,但会在之后删除它们,但我想将电子邮件保留在我的收件箱中,并且我希望轮询器获取所有看不见的电子邮件。
有什么建议可以解决这个问题吗?我一直在搜索和阅读有关电子邮件适配器的文章,但没有发现任何有用的东西。
提前致谢。
我有一段代码,它使用 spring 集成的 IMAP 适配器来轮询收件箱以阅读所有未读的传入电子邮件,并且效果很好。但是,如果我打开任何电子邮件,然后在我的 Outlook 收件箱中将其标记为“未读”,则轮询器不会获取标记的电子邮件。我可以使用 pop3 适配器来获取所有电子邮件,但会在之后删除它们,但我想将电子邮件保留在我的收件箱中,并且我希望轮询器获取所有看不见的电子邮件。
有什么建议可以解决这个问题吗?我一直在搜索和阅读有关电子邮件适配器的文章,但没有发现任何有用的东西。
提前致谢。
看起来您需要自定义“搜索词策略”。来自 Spring Integration (SI) 文档:
默认情况下,ImapMailReceiver 将根据默认 SearchTerm 搜索消息,即所有最近的邮件(如果支持)、未答复的、未删除的、未看到且未由此邮件接收器处理的邮件(通过使用自定义 USER 标志启用,或者在不支持的情况下直接使用 NOT FLAGGED)。从 2.2 版开始,ImapMailReceiver 使用的 SearchTerm 可以通过 SearchTermStrategy 完全配置,您可以通过 search-term-strategy 属性注入。SearchTermStrategy 是一个简单的策略接口,具有一个方法,允许您创建 ImapMailReceiver 将使用的 SearchTerm 实例。
这是来自 SI 论坛的帖子,其中包含有趣的 Oleg 的解释:服务器不支持 RECENT 或 USER 标志
在这里您可以找到 SI DefaultSearchTermStrategy:这是一个确定您应该如何实施自己的策略的地方。我想,你的情况是:
此电子邮件服务器不支持 RECENT 标志,但它支持 USER 标志,该标志将用于防止在电子邮件提取期间重复。
将 SI-mail 日志记录级别切换到 DEBUG 并查看哪个标志支持您的电子邮件服务器。