2015-06-29 3 views
1

Я хотел бы использовать эти образцы в качестве руководства для создания своего рода «почтового процессора», который:весны интеграции почта процессор

  1. Элемент списка
  2. чтения с IMAP
  3. сохранять вложения
  4. сохраняются информация об отправителе и путь подключения в базе данных
  5. отправить письмо с подтверждением отправителя

Я строить бобы читать Mbox и сохранять вложения, как в Gunnar Hillert intermediate email samples:

(...) 
    <int:channel id="sendChannel" /> 

    <int-mail:outbound-channel-adapter 
     channel="sendChannel" host="${smtp.host}" username="${imap.username}" 
     password="${imap.password}" /> 

    <int:channel id="receiveChannel" /> 

    <!-- replace 'userid and 'password' wit the real values --> 
    <int-mail:imap-idle-channel-adapter 
     id="customAdapter" 
     store-uri="imap://${imap.username}:${imap.password}@${imap.host}:${imap.port}/inbox" 
     channel="receiveChannel" auto-startup="true" should-delete-messages="false" 
     should-mark-messages-as-read="false" java-mail-properties="javaMailProperties" /> 

    <util:properties id="javaMailProperties"> 
     <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 
     <prop key="mail.imap.socketFactory.fallback">true</prop> 
     <prop key="mail.store.protocol">imap</prop> 
     <prop key="mail.debug">${mail.debug}</prop> 
    </util:properties> 

    <int:chain id="transform-split" input-channel="receiveChannel" 
     output-channel="outputChannel"> 
     <int:transformer> 
      <bean class="it.lrkwz.imap.support.EmailTransformer" /> 
     </int:transformer> 
     <int:splitter> 
      <bean class="it.lrkwz.imap.support.EmailSplitter" /> 
     </int:splitter> 
    </int:chain> 

    <int:channel id="outputChannel" /> 

    <int-file:outbound-channel-adapter 
     id="save-as-file" auto-create-directory="true" channel="outputChannel" 
     directory-expression="'target/out/' + headers.directory" /> 
</beans> 

Где (основной(), EmailTransformer(), EmailSplitter(), ...) я должен перехватывать «нет привязанность "? Как отправить электронное письмо отправителю?

@SpringBootApplication 
@ImportResource("classpath:META-INF/spring/integration/aruba-imap-idle-config.xml") 
public class ImapProcessorApplication implements CommandLineRunner { 
    private static Logger logger = LoggerFactory.getLogger(ImapProcessorApplication.class); 

    public static void main(String[] args) { 
     ConfigurableApplicationContext applicationContext = SpringApplication.run(ImapProcessorApplication.class, args); 
    } 

    @Autowired 
    DirectChannel receiveChannel; 

    @Autowired 
    DirectChannel sendChannel; 

    @Override 
    public void run(String... arg0) throws Exception { 
     receiveChannel.subscribe(new MessageHandler() { 
      public void handleMessage(Message<?> message) throws MessagingException{ 
    ... 

спасибо.

+0

Было бы интересно увидеть, как handleMessage() фактически извлекает части электронной почты (тело, вложения) – yglodt

ответ

0

Чтобы обрабатывать состояние «без прикрепления», вы должны следовать стандартным рецептам интеграции весны и добавить <filter> к вашему потоку. Похоже, сразу после вашего <splitter> (если вы разделите свое сообщение на `Multipart). Здесь вы можете найти, BTW, как разбить и фильтровать: Download attachments using Java Mail.

У вас уже есть <int-mail:outbound-channel-adapter> для отправки писем. Итак, что вам нужно, просто сделайте outputChannel<publish-subscriber-channel> и добавьте еще подписчиков (<outbound-channel-adapter>, <service-activator>, <outbound-gateway> и т. Д.) И отправьте письмо с подтверждением и сохраните данные в БД. Что угодно и нужно!

Смежные вопросы