我使用Spring Boot和Apache Camel进行后台处理,读取电子邮件,提取附件并对其进行处理。
在第一个版本中,这很好用。第二个版本添加了一个Web服务,包括发送附件。现在,电子邮件附件提取有时会起作用,有时却不起作用。 Camel mailbinding类的调试消息是:
No attachments to extract as content is not Multipart: com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart
我怀疑saaj MimeMultipart类用于Web服务+附件,但是我们不知道为什么JavaMail会选择这个类而不是javax.mail.internet.MimeMultipart?
有什么想法吗?我们怎样才能阻止这种情况?
以下是上述日志行的上下文:
o.a.camel.component.mail.MailConsumer : Fetching 1 messages. Total 1 messages.
o.a.camel.component.mail.MailConsumer : Mail #0 is of type: com.sun.mail.imap.IMAPMessage - com.sun.mail.imap.IMAPMessage@28091f09
o.a.camel.component.mail.MailConsumer : Mapping #0 from javax.mail.Message to Camel MailMessage
o.a.camel.component.mail.MailBinding : Extracting attachments +++ start +++
o.a.camel.component.mail.MailBinding : No attachments to extract as content is not Multipart: com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart
o.a.camel.component.mail.MailBinding : Extracting attachments +++ done +++
答案 0 :(得分:0)
这是一个JRE错误:JDK-8043129 : JAF initialisation in SAAJ clashing with the one in javax.mail它说
在初始化SAAJ组件之后,由javax.mail定义的JAF处理程序不起作用。
它解释了第一封邮件的成功处理(在处理管道中使用了更多的Web服务)以及后续邮件的附件处理失败。
解决方案很简单:此错误已在Java 7 Update 76和Java 8 Update 20中修复。
此问题再次强调了在开发和生产环境中保留相同软件版本的重要性。