Apache camel MessaginException:发送带有附件的邮件时缺少开始边界
我面临着一个问题,这里已经报道了很多次,但到目前为止,没有任何解决方案可以帮助我 这条路线相当简单。它等待一封带有特定主题的电子邮件,根据邮件中的参数创建一个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属性 所有版本和组合都不同=>没有成功 下面是路由代码、处理器和堆栈跟踪。事实上这条路线没有什么特别的 有什么想法吗 路线: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” *)本地测试环境:
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");
}
})