【发布时间】:2012-05-11 14:53:48
【问题描述】:
我已经找到了许多可能与此问题相关的匹配项,但没有一个对我有用。
我正在使用 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)
网络上的建议表明这是一个类加载器问题。要么是activation-1.1.jar或mail-1.4.4.jar文件没找到,要么是mail-1.4.4.jar里面的mailcap文件没找到。
我已经尝试将这些 jar 文件放入 tomcat/lib 中。我已经尝试将 jar 文件中的 mailcap 复制到爆炸战争的 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] 邮件信息交换[ExchangePattern:InOut, Headers:{Connection=Keep-Alive, CamelHttpServletRequest=org.eclipse.jetty.servlets.MultiPartFilter$Wrapper@bb32c5 , upfile=D:downloads!37SQFTS.pdf, CamelHttpPath=/fup, subject=BBC Premier League Update - Edition 1, CamelHttpQuery=null, CamelHttpServletResponse=HTTP/1.1 200
, UntilMessage=直到格林威治标准时间 10:30,当第二个公告可用时(仅限周一至周五),主机=localhost:9095,用户代理=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,放气,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:// localhost:9095/premier, 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,CamelHttpUri=/fup,Cache-Control=no-cache,CamelHttpMethod=POST},BodyType :字符串,正文:亲爱的合作伙伴,
请在附件中找到我们文件的最新版本。
一个最小的示例 maven 项目是here,而战争是here。如果您在 eclipse 中运行项目或使用
mvn jetty:run
然后使用http://localhost:9095/premier的表格
您将收到“无法联系服务器”异常。但是,如果您将战争部署到 tomcat,您将得到缺少的开始边界异常。如果您编辑 applicationContext.xml 并将 ** 替换为有效值,它实际上会发送一封电子邮件。
有什么想法吗?
【问题讨论】:
-
stackoverflow.com/q/1969667/1002025 高度相关,但我应该在哪里寻找其他 jars 以及在骆驼 spring-dsl 环境中如何设置类加载器?
-
在拔出霰弹枪之前让我们做一些调试。您应该只在阅读消息时获得异常;您在哪里以及如何阅读信息?会话调试输出显示什么?
-
我在问题中添加了我的骆驼路线的简化版本。异常发生在 smtp 端点上。日志报告显示标题。
-
Bill - 抱歉,我不知道如何在调试器下运行 tomcat,如果我在 eclipse 中运行骆驼路线,它可以工作。我制作了一个最小版本并放在这里:docs.google.com/open?id=0BwhuUU2g0GM9Um1PdGRHV0tfN1k。如果您使用“mvn jetty:run”运行它,您会收到“无法联系电子邮件服务器”错误。如果将其部署在 tomcat 中,则会出现“缺少边界”错误。如果您编辑 applicationContext.xml 文件中的 **** 位,它实际上应该发送邮件。
-
抱歉,我对 Camel 一无所知,我需要很长时间才能对您的应用程序进行分类并为您调试它。如果您所做的只是 sending 消息,我不知道您为什么会收到该异常,因为这只发生在解析消息时。也许 Camel 正在创建消息文本本身,然后让 JavaMail 读取并发送它?
标签: spring tomcat jetty jakarta-mail apache-camel