一尘不染

在Tomcat中发送带有附件文件的消息时缺少启动边界异常

tomcat

我已经找到了许多可能的解决方案,但没有一个适合我。

我正在使用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&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]邮件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并用有效值替换
__ ,它将实际上发送一封电子邮件。

有任何想法吗?


阅读 261

收藏
2020-06-16

共1个答案

一尘不染

我已经尝试过您的简化骆驼路线示例,它可以与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上运行,请用JRE_HOME替换JAVA_HOME / lib。
  4. 您正在运行什么版本的JVM。我正在使用Oracle JDK6。您正在使用OpenJDK / J9还是其他工具?
2020-06-16