Отсутствует начальная граница Исключение при отправке сообщений с вложенным файлом в Tomcat

Я нашел несколько возможных совпадений с этой проблемой, но ни одно из них не подходит для меня.

Я использую Apache Camel для доставки файла в качестве почтового вложения. Он отлично работает, используя следующие цели:

причал: запустить причал: запустить взорванный причал: запустить войну

Я использую 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 не найдены, либо файл mailcap в mail-1.4.4.jar не найден.

Я попытался поместить эти файлы 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] mail INFO Exchange [ExchangePattern: InOut, заголовки:{Connection=Keep-Alive, CamelHttpServletRequest=org.eclipse.jetty.servlets.MultiPartFilter$Wrapper@bb32c5, upfile=D:downloads!37SQFTS.pdf, CamelHttpPath=/fup, subject= Обновление Премьер-лиги BBC - Выпуск 1, CamelHttpQuery=null, CamelHttpServletResponse=HTTP/1.1 200, BeforeMessage= до 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://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; border =---------------------------7dc3a8371906f6, CamelHttpUri=/fup, Cache-Control=no-cache, CamelHttpMethod=POST}, BodyType:String, Body: Уважаемый партнер, пожалуйста, приложите последнюю версию нашего файла. 

Минимальный пример проекта Maven здесь и война здесь. Если вы запустите проект в затмении или с

mvn jetty:run

и затем используйте форму в http://localhost:9095/premier

Вы получите исключение "невозможно связаться с сервером". Но если вы развернете войну для tomcat, вы получите исключение отсутствующей границы начала. Если вы отредактируете applicationContext.xml и замените ** действительными значениями, оно фактически отправит электронное письмо.

Есть идеи?

2 ответа

Решение

Я попробовал ваш упрощенный пример верблюжьего маршрута, он хорошо работает с mvn jetty:run.

В моем Tomcat 7.0.27, Java 6, это действительно работает. Письмо было отправлено правильно. Разница лишь в том, что я не использую:

mvn install

Вместо этого используйте:

mvn package

Затем скопируйте target/test-mail-0.0.1-SNAPSHOT.war в папку веб-приложений Tomcat и запустите tomcat (bin/startup.sh или bin/startup.bat).

Надеюсь, что это работает и для вас.

Я предлагаю выбрать ту же версию Tomcat, что и у меня, и выполнить тот же шаг.

Другой источник проблемы вы должны:

  1. Проверьте, есть ли у вас переменная окружения CATALINA_HOME или CATALINA_BASE, не подозревающая, что вы указали на другую установку Tomcat.
  2. Также в переменной среды проверьте содержимое вашего JRE_HOME или JAVA_HOME (при использовании JDK) и вашей переменной CLASSPATH. Вам следует установить для вашего classpath значение $JAVA_HOME/jre/lib:$JAVA_HOME/jre/lib/ext:. или%JAVA_HOME%/jre/lib;%JAVA_HOME%/jre/lib/ext;. (последняя точка очень важна)
  3. Замените JAVA_HOME/lib на JRE_HOME, если вы работаете только на JRE.
  4. Какую версию JVM вы используете. Я использую Oracle JDK 6. Вы используете OpenJDK/J9 или что-то еще?

У меня есть рабочее решение моей проблемы, но нет ответа на мой вопрос. Мой оригинальный набор маршрутов работает всеми способами, которые я пробовал, за исключением Tomcat, и не требует никакого кода Java (моего собственного).

Я применил метод грубой силы и переместил прикрепленное к пристани навесное оборудование к телу, а затем по пути переместил его обратно к навесному приспособлению. Это приводит меня к тому, что я могу развернуть, но это взлом.

Все еще ищу способ развернуть мой первоначальный набор маршрутов в Tomcat 6.

Другие вопросы по тегам