Отсутствует начальная граница Исключение при отправке сообщений с вложенным файлом в 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&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, что и у меня, и выполнить тот же шаг.
Другой источник проблемы вы должны:
- Проверьте, есть ли у вас переменная окружения CATALINA_HOME или CATALINA_BASE, не подозревающая, что вы указали на другую установку Tomcat.
- Также в переменной среды проверьте содержимое вашего 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;. (последняя точка очень важна)
- Замените JAVA_HOME/lib на JRE_HOME, если вы работаете только на JRE.
- Какую версию JVM вы используете. Я использую Oracle JDK 6. Вы используете OpenJDK/J9 или что-то еще?
У меня есть рабочее решение моей проблемы, но нет ответа на мой вопрос. Мой оригинальный набор маршрутов работает всеми способами, которые я пробовал, за исключением Tomcat, и не требует никакого кода Java (моего собственного).
Я применил метод грубой силы и переместил прикрепленное к пристани навесное оборудование к телу, а затем по пути переместил его обратно к навесному приспособлению. Это приводит меня к тому, что я могу развернуть, но это взлом.
Все еще ищу способ развернуть мой первоначальный набор маршрутов в Tomcat 6.