Проблема с извлечением вложений из сообщения электронной почты, загруженного адаптером входящей электронной почты Spring Integration - PullRequest
0 голосов
/ 24 мая 2019

У меня есть приложение Spring Integration, состоящее из почтового входящего адаптера, настроенного в контексте моего приложения для опроса почтового ящика POP3 для обработки электронных писем, содержащих вложения больших файлов XML.

У меня есть класс обработчика (активатор службы) для извлечения вложений из каждого сообщения электронной почты, которое передается адаптером входящего канала почты.

Эта настройка прекрасно работает в нашем текущем производственном приложении, использующем Spring Integration 2.1. Теперь у нас есть требование для перехода на Spring Integration 5.1.4, и это же приложение выдает ошибку в процессе извлечения вложений из сообщения электронной почты. Пожалуйста, обратитесь к фрагменту исходного кода 2

Эта установка прекрасно работает с версией Spring Integration 2.1, но обнаруживает ошибку в Spring Integration 5.1.4, указывающую на то, что папка почтового ящика не открыта. Исключение составляет

processMsg(): Mail messaging error processing message     javax.mail.MessagingException: No inputstream from datasource;

вложенное исключение: java.lang.IllegalStateException: папка не открыта

Spring Integration Configuration

<int:channel id="emailInputChannel"/> 
<int-mail:inbound-channel-adapter id="pop3EmailAdapter" store-uri="pop3://    ${pop3.user}:${pop3.pwd}@${pop3.server.host}/Inbox" 
channel="emailInputChannel" should-delete-messages="true" auto-startup="true" 
java-mail-properties="javaMailProperties">               
    <int:poller max-messages-per-poll="1" fixed-delay="${email.poller.rate}" />
</int-mail:inbound-channel-adapter>

<!-- Java Mail POP3 properties -->
<util:properties id="javaMailProperties">
  <beans:prop key="mail.debug">true</beans:prop> 
  <beans:prop key="mail.pop3.port">${pop3.server.port}</beans:prop> 
</util:properties>

<!-- Email Handler configuration -->
<si:service-activator id="emailAttachmentsHandler"
    input-channel="emailInputChannel" ref="emailMessageHandler" method="extractEmailAttachments">
</si:service-activator>

<beans:bean id="emailMessageHandler" class="EmailMessageHandler"/>

Обработчик сообщений электронной почты Фрагмент исходного кода Java 2

public List<org.springframework.messaging.Message<?>> extractEmailAttachments(Message emailMsg) throws Exception {  
List<org.springframework.messaging.Message<?>> attachmentList = null;

logger.info("LookoutEmailAttachmentSplitter.extractEmailAttachments: Received Message: " + emailMsg);

attachmentList = processMsg(emailMsg);  


}

    private List<org.springframework.messaging.Message<?>> processMsg(javax.mail.Message emailMsg) throws MessagingException {
    int max;
    Multipart mp;
    Object content;

    try {
        // getting the contents of the message
        logger.info("processMsg(): Message: " + emailMsg);

        content = emailMsg.getContent();

        // Check the content to verify if it has multipart attachments. 
        if (!(content instanceof Multipart)) 
            return attachmentList;
     }
     catch (Exception ex){
       logger.info("processMsg(): Error: " + ex.getMessage());
     }

}

...