camel-mail IMAP没有跳过失败的消息

时间:2016-11-25 12:30:48

标签: java apache-camel javamail imap

我有路由“ imap://%s @%s?密码=%s& folderName =%s& unseen = true& delete = true& skipFailedMessage = true ”来轮询电子邮件并跳过失败的。此属性 skipFailedMessage = true 未被尊重,或者我很想理解它的使用。

我正在阅读来自不同占位符的5个不同邮箱的电子邮件,但遇到“org.apache.camel.RuntimeCamelException时无法读取电子邮件:由于以下原因而无法提取正文:BASE64Decoder:编码流中出错:找到有效的base64字符后电子邮件上的填充字符(=)“。如果删除了失败的邮件,我只能读取不同邮箱上的所有其他电子邮件。请帮忙。我尝试了2.17.3和2.18版本,两者的行为方式相同。

这是堆栈跟踪:

  

org.apache.camel.RuntimeCamelException:由于以下原因导致无法提取正文:   BASE64Decoder:编码流中的错误:找到有效的base64字符   在填充字符(=)之后,最近的10个字符是:   “xmlns:v =”u“.Exchange:Exchange []。消息:   com.sun.mail.imap.IMAPMessage@7883ab8c at   org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:278)     在   org.apache.camel.component.mail.MailMessage.createBody(MailMessage.java:105)     在   org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:47)     在   org.apache.camel.component.mail.MailConsumer.createExchanges(MailConsumer.java:354)     在   org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:128)     在   org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175)     在   org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102)     在   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)     在   java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.access $ 301(ScheduledThreadPoolExecutor.java:180)     在   java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)引起:   com.sun.mail.util.DecodingException:BASE64Decoder:编码错误   stream:在填充字符(=)后找到有效的base64字符,   10个最新的角色是:“xmlns:v =”u“at   com.sun.mail.util.BASE64DecoderStream.decode(BASE64DecoderStream.java:309)     在   com.sun.mail.util.BASE64DecoderStream.read(BASE64DecoderStream.java:144)     在sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)at   sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)at   sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)at   java.io.InputStreamReader.read(InputStreamReader.java:184)at   com.sun.mail.handlers.text_plain.getContent(text_plain.java:98)at   javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:795)     在javax.activation.DataHandler.getContent(DataHandler.java:542)at   javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1454)at   org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:250)     ...省略了13个常见帧

2 个答案:

答案 0 :(得分:1)

错误来自JavaMail,可能是由于格式不正确的消息造成的。您可以通过将系统属性"mail.mime.base64.ignoreerrors"设置为"true"来告诉JavaMail忽略此类错误。

答案 1 :(得分:1)

感谢@Claus Ibsen记录此问题。报告的问题已在版本2.17.5, 2.18.1, 2.19.0

中修复

我确认它已在2.18.1版本上修复。

相关问题