使用apache camel,使用Polling使用者,在轮询我的邮件时标记为已读。
options : delete=false&peek=false&unseen=true
轮询后,当我处理附件时,如果发生任何错误,我想将邮件设为“未读”。所以我以后可以再次聚集。
public void process(Exchange exchange) throws Exception {
Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
Message messageCopy = exchange.getIn().copy();
if (messageCopy.getAttachments().size() > 0) {
for (Map.Entry<String, DataHandler> entry : messageCopy.getAttachments().entrySet()) {
DataHandler dHandler = entry.getValue();
// get the file name
String filename = dHandler.getName();
// get the content and convert it to byte[]
byte[] data =
exchange.getContext().getTypeConverter().convertTo(byte[].class, dHandler.getInputStream());
log.info("Downloading attachment, file name : " + filename);
InputStream fileInputStream = new ByteArrayInputStream(data);
try {
// Processing attachments
// if any error occurs here, i want to make the mail mark as unread
} catch (Exception e) {
log.info(e.getMessage());
}
}
}
}
我注意到选项peek,通过将其设置为true,在轮询期间不会使邮件标记为已读,在这种情况下是否有任何选项可以使标记为已读处理后。
答案 0 :(得分:1)
要获得您想要的结果,您应该有选项
peek=true&unseen=true
peek = true 选项应该确保邮件在邮件服务器上保持准确状态,就像轮询之前一样,即使存在异常也是如此。但是,目前它不会起作用。这实际上是Camel Mail组件中的一个错误。我已经向https://issues.apache.org/jira/browse/CAMEL-9106提交了一个补丁,这可能会在将来的版本中修复。
作为一种解决方法,您可以设置 mapMailMessages = false ,但之后您必须自己处理电子邮件内容。在Camel 2.15之后,你还有 postProcessAction 选项,你可以从处理错误的消息中删除SEEN标志。不过,我建议等待修复。