我用的是apache camel,有轮询功能,轮询时我的邮件被标记为已读。
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,它将不会使邮件标记为已读在轮询期间,在这种情况下,有任何选项,使其标记为已读处理后.
2条答案
按热度按时间np8igboo1#
为了得到你想要的结果,你应该有选择
peek=true选项是为了确保邮件在轮询前保持在邮件服务器上的状态,即使有异常也是如此。但是,目前它不起作用。这实际上是Camel Mail组件中的一个bug。我已经提交了https://issues.apache.org/jira/browse/CAMEL-9106的补丁,这个问题可能会在未来的版本中得到修复。
作为一种解决方法,你可以设置mapMailMessages=false,但是这样你就必须自己处理邮件内容了。在Camel 2.15以后的版本中,你还可以设置postProcessAction选项,这样你就可以从处理错误的邮件中删除SEEN标志。不过,我还是建议你等待修复。
aiazj4mn2#
我们可以用下面的代码设置邮件未读标志