Java 轮询后将邮件标记为未读-Apache Camel
当轮询我的邮件被标记为已读时,我使用ApacheCamel和轮询消费者Java 轮询后将邮件标记为未读-Apache Camel,java,email,apache-camel,pooling,Java,Email,Apache Camel,Pooling,当轮询我的邮件被标记为已读时,我使用ApacheCamel和轮询消费者 options : delete=false&peek=false&unseen=true 在轮询之后,当我处理附件时,如果出现任何错误,我希望将邮件设置为“未读”。好让我以后再去游泳 public void process(Exchange exchange) throws Exception { Map<String, DataHandler> attachments = excha
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());
}
}
}
}
公共作废进程(Exchange)引发异常{
映射附件=exchange.getIn().getAttachments();
messageCopy=exchange.getIn().copy();
如果(messageCopy.getAttachments().size()>0){
对于(Map.Entry:messageCopy.getAttachments().entrySet()){
DataHandler dHandler=entry.getValue();
//获取文件名
字符串文件名=dHandler.getName();
//获取内容并将其转换为字节[]
字节[]数据=
exchange.getContext().getTypeConverter().convertTo(字节[].class,dHandler.getInputStream());
log.info(“下载附件,文件名:”+文件名);
InputStream文件InputStream=新的ByteArrayInputStream(数据);
试一试{
//处理附件
//如果此处出现任何错误,我希望将邮件标记为未读
}捕获(例外e){
log.info(如getMessage());
}
}
}
}
我注意到peek选项,通过将其设置为true,它不会在轮询期间将邮件标记为read,在这种情况下,是否有任何选项在处理后将邮件标记为read。要获得您想要的结果,您应该有选项
peek=true&unseen=true
peek=true选项旨在确保邮件服务器上的邮件保持其轮询前的准确状态,即使出现异常。然而,目前它不起作用。这实际上是骆驼邮件组件中的一个错误。我已经向提交了一个补丁,这可能会在将来的版本中得到修复
作为一种解决方法,您可以设置mapMailMessages=false,但是您必须自己处理电子邮件内容。在Camel 2.15以后的版本中,您还有postProcessAction选项,使用该选项,您可能会从有处理错误的消息中删除SEEN标志。不过,我还是建议您等待修复。您解决了吗?我现在也有类似的问题