1

我遇到了一个问题,该问题已在此处多次报告,但到目前为止没有解决方案对我有帮助。

路线比较简单。它等待具有特定主题的电子邮件,从邮件中的参数创建 PDF 并将此 PDF 邮寄回发件人。

当我在 Eclipse 中将路由作为 Junit 测试用例启动时,它的工作原理就像一个魅力,但是在 Linux 服务器上的 Tomcat 中运行它时,它会在尝试发送电子邮件时崩溃,并出现“javax.mail.MessagingException: Missing start boundary” PDF 附件。

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

*) 服务器环境:Tomcat 8.0.12、Ubuntu Server 14.0.1。LTS、Java 1.8.0_20、骆驼 2.14.0

*) 我已经尝试过什么: - 使用较新版本的 mail.jar(通过升级到当前的 Camel 版本) - 将 mail.jar、activation.jar 放入 Tomcat lib - 设置各种 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)));    

可怕的例外...... :-(

javax.mail.MessagingException: Missing start boundary
        at javax.mail.internet.MimeMultipart.parsebm(MimeMultipart.java:882)
        at javax.mail.internet.MimeMultipart.parse(MimeMultipart.java:503)
        at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:417)
        at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1354)
        at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1021)
        at javax.mail.internet.MimeMultipart.updateHeaders(MimeMultipart.java:419)
        at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1354)
        at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2107)
        at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2075)
        at org.apache.camel.component.mail.DefaultJavaMailSender.send(DefaultJavaMailSender.java:118)
        at org.apache.camel.component.mail.MailProducer.process(MailProducer.java:56)
        at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
        at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:143)
        at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:307)
        at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:138)
        at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
        at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
        at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
        at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:105)
        at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:87)
        at org.apache.camel.component.mail.MailConsumer.processExchange(MailConsumer.java:287)
        at org.apache.camel.component.mail.MailConsumer.processBatch(MailConsumer.java:213)
        at org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:119)
        at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:187)
        at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:114)
        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.access$301(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)
4

2 回答 2

1

I had this exact problem. The issue was caused by the inbound imap headers set on the In message on the exchange (boundary, mime type etc) which would confuse the SMTP server when you try to send the mail.

In the attachmentProcessor use the Out message instead of the in for the resulting body. This creates a new message which drops all the headers etc from the IMAP from component

eg:

       .process(new Processor() {   
            @Override
            public void process(Exchange exchange) throws Exception {
                exchange.getOut().setBody("here's the resulting message");
            }
        })
于 2015-01-27T23:02:56.073 回答
1

可能的解决方案:

我希望它有所帮助。

于 2014-11-17T19:43:28.607 回答