Apache camel MessaginException:发送带有附件的邮件时缺少开始边界

Apache camel MessaginException:发送带有附件的邮件时缺少开始边界,apache-camel,jakarta-mail,tomcat8,Apache Camel,Jakarta Mail,Tomcat8,我面临着一个问题,这里已经报道了很多次,但到目前为止,没有任何解决方案可以帮助我 这条路线相当简单。它等待一封带有特定主题的电子邮件,根据邮件中的参数创建一个PDF,然后将此PDF邮寄回发件人 当我在Eclipse中作为Junit测试用例启动路由时,它就像一个魔咒一样工作,但是在Linux服务器上的Tomcat中运行它时,当它试图发送带有PDF附件的电子邮件时,它会崩溃为“javax.mail.MessaginException:Missing start boundary” *)本地测试环境:

我面临着一个问题,这里已经报道了很多次,但到目前为止,没有任何解决方案可以帮助我

这条路线相当简单。它等待一封带有特定主题的电子邮件,根据邮件中的参数创建一个PDF,然后将此PDF邮寄回发件人

当我在Eclipse中作为Junit测试用例启动路由时,它就像一个魔咒一样工作,但是在Linux服务器上的Tomcat中运行它时,当它试图发送带有PDF附件的电子邮件时,它会崩溃为“javax.mail.MessaginException:Missing start boundary”

*)本地测试环境: Tomcat 8.0.5、Windows 7、Java 1.8.0_20、Camel 2.14.0

*)服务器环境: Tomcat 8.0.12,Ubuntu服务器14.0.1。LTS、Java 1.8.0_20、Camel 2.14.0

*)我已经试过什么了: -使用更新版本的mail.jar(通过升级到当前的Camel版本) -将mail.jar、activation.jar放入Tomcat库 -设置各种mail.mime.multipart.XXX属性 所有版本和组合都不同=>没有成功

下面是路由代码、处理器和堆栈跟踪。事实上这条路线没有什么特别的

有什么想法吗

路线:

from("imap://XXXXXXXXXXXXXXXX?" +
        "host=XXXXXXXXXXXXXXXXX&" +
        "password=XXXXXXXXXX&" +
        "delete=true&" +                    
        "consumer.delay=12000&" +           
"searchTerm.subjectOrBody=XXXXXXXXXXXXXXXXX&" + 
        "searchTerm.unseen=true"        
    )
.routeId(ROUTE_ID)
.process(attachmentProcessor)

.setHeader("to", simple("${in.header.from}")) 
.setHeader("from", simple("XXXXXXXXXXXXXXXXX"))
.setHeader("subject", simple("XXXXXXXXXXXXXXXXX"))
.setBody(simple("XXXXXXXXXXXXXXXX"))
.to("smtp://XXXXXXXXXXXXXXXXX")
.log(mailMessage);
;
处理器的一部分:

pdfUtil.generateLabels(tempDirPath, year, sequenceNumberStart, numberOfPages);
  exchange.getIn().addAttachment(fileName, new DataHandler(new FileDataSource(tempDirPath)));    
可怕的例外…:-(

可能的解决办法:

  • 请参阅。解决方案建议检查类路径
  • 请参阅。解决方案建议设置属性
    mail.mime.multipart.ignoreexistingboundaryparameter

    System.setProperty("mail.mime.multipart.ignoreexistingboundaryparameter", "true");
    

我希望这能有所帮助。

我遇到了这个问题。问题是由于在exchange上的In邮件(边界、mime类型等)上设置了入站imap头,这会在您尝试发送邮件时混淆SMTP服务器

attachmentProcessor
中,对生成的正文使用
Out
消息,而不是
In
。这将创建一条新消息,从IMAP from组件中删除所有标题等

例如:


您好,彼得,谢谢您的快速回复。这两种解决方案(以及其他许多解决方案)我已经尝试过了。不幸的是没有成功……非常感谢!这就是解决方案!:-)
System.setProperty("mail.mime.multipart.ignoreexistingboundaryparameter", "true");
       .process(new Processor() {   
            @Override
            public void process(Exchange exchange) throws Exception {
                exchange.getOut().setBody("here's the resulting message");
            }
        })