我有路由“ 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个常见帧
答案 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版本上修复。