我已经找到了许多可能的解决方案,但没有一个适合我。
我正在使用Apache Camel将文件作为电子邮件附件发送。使用以下Maven目标,它可以完美工作:
码头:运行码头:运行爆炸码头:运行战争
我正在使用Java 1.6。我的部署容器是tomcat6。在tomcat6和tomcat7中,出现以下异常:
org.springframework.mail.MailSendException:失败消息:javax.mail.MessagingException:缺少开始边界;消息异常详细信息(1)是:失败消息1:javax.mail.MessagingException:javax.mail.internet.MimeMultipart.parsebm(MimeMultipart.java:882)缺少起始边界
Web上的建议表明这是一个类加载器问题。可能是找不到activation-1.1.jar或mail-1.4.4.jar文件,或者没有找到mail-1.4.4.jar中的mailcap文件。
我试过将这些jar文件放在tomcat / lib中。我已经尝试将mailcap从jar文件复制到爆炸战争的META-INF目录中。这些都不起作用。
版本:
Windows:Apache Tomcat / 7.0.5 JDK 1.6.0_27-b07 Apache Camel 2.8.0-fuse-00-08
Linux-ubuntu 10.04 LTS随附的版本-我稍后会进行检查并添加。
这是我的骆驼路线的简化版本:
<route id="uploadFileForm"> <from uri="jetty:http://0.0.0.0:9095/premier"/> <to uri="velocity:form.html"/> </route> <route id="uploadFile"> <from uri="jetty:http://0.0.0.0:9095/fup"/> <to uri="log:mail?showBody=true&showHeaders=true"/> <to uri="smtp://localhost"/> <setHeader headerName="content-type"><constant>text/plain</constant></setHeader> <setBody><constant>Message Sent</constant></setBody> </route>
这是日志显示的内容:
[4-seda:// mail-ws-audio-files]邮件INFO Exchange [ExchangePattern:InOut,标头:{Connection = Keep-Alive,CamelHttpServletRequest=org.eclipse.jetty.servlets.MultiPartFilter$Wrapper@bb32c5,upfile = D:downloads!37SQFTS.pdf,CamelHttpPath = / fup,主题= BBC英超联赛更新-版本1,CamelHttpQuery = null,CamelHttpServletResponse = HTTP / 1.1 200 ,直到第二个公告可用时,直到Message = until 10:30 GMT(仅限周一至周五),Host = localhost:9095,User-Agent = Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),Accept-Encoding = gzip,deflate,bulletin_type = am,to = julian.cable @ yahoo.com,cc = admin @ localhost,breadcrumbId = ID-B1-L0N336601-58958-1335935026761-0-2,CamelHttpUrl = http:// localhost:9095 / fup,Content-Length = 24896,referer = http://本地主机:9095 /高级,from=jfbcable@gmail.com,Accept = image / jpeg,application / x-ms-application,image / gif,application / xaml + xml,image / pjpeg,application / x-ms-xbap, application / vnd.ms-excel,application / vnd.ms-powerpoint,application / msword,* / *,Accept-Language = en-GB,Content-Type = multipart / form-data; 边界= --------------------------- 7dc3a8371906f6, 请在附件中找到我们文件的最新版本。
一个最小的示例maven项目在这里,战争在这里。如果您在eclipse中运行项目或使用
mvn jetty:run
然后使用http:// localhost:9095 / premier上的表格
您将收到“无法联系服务器”异常。但是,如果将战争部署到tomcat,您将获得缺少的开始边界异常。如果您编辑applicationContext.xml并用有效值替换 __ ,它将实际上发送一封电子邮件。
有任何想法吗?
我已经尝试过您的简化骆驼路线示例,它可以与mvn jetty:run一起使用。
在我的Tomcat 7.0.27 Java 6中,它实际上可以工作。邮件已正确发送。唯一的区别是我不使用:
mvn install
而是使用:
mvn package
然后将target / test-mail-0.0.1-SNAPSHOT.war复制到Tomcat webapps文件夹,然后启动tomcat(bin / startup.sh或bin / startup.bat)。
希望这也对您有用。
我的建议是选择与我相同的Tomcat版本,并执行相同的步骤。
问题的其他来源,您应该: