我正在使用Apache Camel来监控电子邮件收件箱。我一直在试图找出自上次调查以来只收到新收到的电子邮件。不知何故,这个过程只会返回在之前的民意调查之间收到的电子邮件。
实施例: 轮询时间设置为60秒。如果我在此时间范围内向收件箱发送一封电子邮件,则该邮件会处理一封电子邮件。如果我在接下来的60秒内发送两封电子邮件,则只有两封电子邮件由路由处理,而不是三封,它会忽略先前轮询中处理的第一封电子邮件。我想知道这是怎么发生的?
我没有查看邮箱或将任何电子邮件标记为已读。
<camel:camelContext id="webService">
<camel:route id="monitor">
<camel:from uri="imap://pulp.test.uk?username=tester&password=testing&unseen=true&consumer.delay=60000" />
<camel:process ref="storeProcessor" />
</camel:route>
</camel:camelContext>
答案 0 :(得分:0)
请查看&#34; peek&#34;驼峰imap组件的选项。通常是通过imap&#34; peek&#34;来获取新电子邮件时的骆驼每个已处理的消息在这种情况下,如果消息处理成功,则将其标记为已显示,但如果在处理过程中会出现一些错误,则消息将保持不变。在您的路线中,您只处理看不见的消息。
http://camel.apache.org/mail.html
有关&#34; peek&#34;的信息文档中的选项:
仅限消费者。在处理邮件消息之前,将javax.mail.Message标记为peeked。这仅适用于IMAPMessage消息类型。通过使用peek,邮件服务器上的邮件将不会被标记为SEEN,如果Camel中存在错误处理,则允许我们回滚邮件消息。