骆驼邮件 IMAP 不跳过失败的邮件

camel-mail IMAP not skipping failed messages

我有路由“imap://%s@%s?password=%s&folderName=%s&unseen=true&delete=true&skipFailedMessage=true”来轮询电子邮件并跳过失败那些。这个 属性 skipFailedMessage=true 没有得到尊重,或者我想念它的用法。

我正在阅读来自 5 个具有不同占位符的不同邮箱的电子邮件,但是当我在其中一个电子邮件中遇到 "org.apache.camel.RuntimeCamelException: Failed to extract body due to: BASE64Decoder: Error in encoded stream: found valid base64 character after a padding character (=)" 时,没有人阅读任何电子邮件。如果失败的消息被删除,我只能阅读不同邮箱中的所有其他电子邮件。请帮忙。我尝试了 2.17.3 和 2.18 版本,两者的行为方式相同。

这是堆栈跟踪:

org.apache.camel.RuntimeCamelException: Failed to extract body due to: BASE64Decoder: Error in encoded stream: found valid base64 character after a padding character (=), the 10 most recent characters were: "xmlns:v="u". Exchange: Exchange[]. Message: com.sun.mail.imap.IMAPMessage@7883ab8c at org.apache.camel.component.mail.MailBinding.extractBodyFromMail(MailBinding.java:278) at org.apache.camel.component.mail.MailMessage.createBody(MailMessage.java:105) at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:47) at org.apache.camel.component.mail.MailConsumer.createExchanges(MailConsumer.java:354) at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:128) at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:175) at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:102) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: com.sun.mail.util.DecodingException: BASE64Decoder: Error in encoded stream: found valid base64 character after a padding character (=), the 10 most recent characters were: "xmlns:v="u" at com.sun.mail.util.BASE64DecoderStream.decode(BASE64DecoderStream.java:309) at com.sun.mail.util.BASE64DecoderStream.read(BASE64DecoderStream.java:144) at 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) at 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 common frames omitted

错误来自 JavaMail,可能是由于邮件格式不正确。您可以通过将系统 属性 "mail.mime.base64.ignoreerrors" 设置为 "true".

来告诉 JavaMail 忽略此类错误

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

中修复

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