2

我找到了许多可能与这个问题匹配的东西,但没有一个对我有用。

我正在使用 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&amp;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,

    请在附件中找到我们文件的最新版本。

一个最小的示例 maven 项目在这里,战争在这里。如果您在 Eclipse 中运行项目或使用

mvn jetty:run

然后使用http://localhost:9095/premier的表格

您将收到“无法联系服务器”异常。但是,如果您将战争部署到 tomcat,您将得到缺少的开始边界异常。如果您编辑 applicationContext.xml 并将* * 替换为有效值,它实际上会发送一封电子邮件。

有任何想法吗?

4

2 回答 2

0

我有一个可行的解决方案来解决我的问题,但没有回答我的问题。我的原始路由集以我尝试过的所有方式工作,除了在 Tomcat 中并且不需要 java 代码(我自己的)。

我采取了蛮力的方法并将码头生成的附件移动到身体上,然后在路线的后期,将其移回附件。它让我可以部署一些东西,但它是一个黑客。

仍在寻找一种方法来部署我在 Tomcat 6 中设置的原始路由。

于 2012-05-03T07:44:44.257 回答
0

我已经尝试过您的简化骆驼路线示例,它适用于 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 版本并遵循相同的步骤。

您应该的其他问题来源:

  1. 检查是否有环境变量 CATALINA_HOME 或 CATALINA_BASE 毫无疑问地设置为指向其他 Tomcat 安装。
  2. 同样在环境变量中,检查 JRE_HOME 或 JAVA_HOME(使用 JDK 时)和 CLASSPATH 变量的内容。您应该将类​​路径设置为 $JAVA_HOME/jre/lib:$JAVA_HOME/jre/lib/ext:。或 %JAVA_HOME%/jre/lib;%JAVA_HOME%/jre/lib/ext;。(最后一个点很重要)
  3. 如果您仅在 JRE 上运行,请将 JAVA_HOME/lib 替换为 JRE_HOME。
  4. 您正在运行什么版本的 JVM。我正在使用 Oracle JDK 6。您使用的是 OpenJDK/J9 还是其他?
于 2012-05-15T18:10:57.793 回答