Как преобразовать конфигурацию spring-integration-email на основе xml в конфигурацию на основе java?

Я использую spring-integration-email в весеннем загрузочном приложении для получения электронных писем. Все примеры, которые я нашел в Интернете, используют конфигурацию на основе xml.

Я использую конфигурацию на основе Java в своем приложении, и я хочу использовать ее для электронной почты spring-integration.

Ниже приведена моя конфигурация на основе xml, которая работает правильно. Как я могу преобразовать его в конфигурацию на основе Java?

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

<mail:inbound-channel-adapter id="imapAdapter"
                              store-uri="${imap.uri}"
                              channel="recieveEmailChannel"
                              should-delete-messages="false"
                              should-mark-messages-as-read="true"
                              auto-startup="true"
                              java-mail-properties="javaMailProperties">
    <int:poller fixed-delay="${imap.poolerSecondsDelay}" time-unit="SECONDS"/>
</mail:inbound-channel-adapter>

<int:channel id="recieveEmailChannel">
    <int:interceptors>
        <int:wire-tap channel="logger"/>
    </int:interceptors>
</int:channel>

<int:logging-channel-adapter id="logger" level="DEBUG"/>

<int:service-activator input-channel="recieveEmailChannel" ref="emailReceiverService" method="receive"/>

<bean id="emailReceiverService" class="com.sts.app.email.service.EmailService">
</bean>

person ashishjmeshram    schedule 23.03.2016    source источник
comment
По этой ссылке стартер Spring Boot не поддерживает конфигурацию почты на основе Java: stackoverflow.com/a/24873590/3226981 выглядит немного старым, хотя ..!   -  person Suyash    schedule 23.03.2016


Ответы (2)


Размещенный вами код (вместе с некоторыми небольшими улучшениями, делающими его более настраиваемым) будет преобразован в следующую конфигурацию Java:

@Configuration 
public class MailConfig {

    @Value("${email.host}")
    private String host;

    @Value("${email.from}")
    private String from;

    @Value("${email.subject}")
    private String subject;

    @Bean
    public JavaMailSender javaMailService() {
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost(host);
        return javaMailSender;
    }

    @Bean
    public SimpleMailMessage simpleMailMessage() {
       SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
       simpleMailMessage.setFrom(from);
       simpleMailMessage.setSubject(subject);
       return simpleMailMessage;
    }
}

также быстро просмотрите эту ссылку

person Vinit Solanki    schedule 23.03.2016
comment
код, который вы разместили, предназначен для отправки электронной почты, а не для получения электронных писем, как в моей конфигурации xml. - person ashishjmeshram; 23.03.2016
comment
просто проверьте эту ссылку: docs.spring.io/spring-boot/docs/current/reference/htmlsingle/, есть некоторые настройки для получения почты. - person Vinit Solanki; 23.03.2016
comment
Я не использую JMS, в ссылке есть прослушиватель jms и т. д. - person ashishjmeshram; 23.03.2016
comment
stackoverflow.com/ вопросы/32401643/ - person Vinit Solanki; 23.03.2016
comment
С одной стороны, этот ответ ничего не говорит об интеграции Spring. Из другого комментария Винита ссылки на правильный ответ. Я бы закрыл этот вопрос как дублирование. - person Artem Bilan; 23.03.2016

@Bean
@InboundChannelAdapter(value = "testReceiveEmailChannel", poller = @Poller(fixedDelay = "200000", taskExecutor = "asyncTaskExecutor"))
public MessageSource<javax.mail.Message> mailMessageSource(MailReceiver mailReceiver) {
    MailReceivingMessageSource mailReceivingMessageSource = new MailReceivingMessageSource(mailReceiver);
    // other setters here
    return mailReceivingMessageSource;
}

@Bean
public MailReceiver imapMailReceiver(@Value("imaps://${login}:${pass}@${host}:993/inbox") storeUrl) {
     ImapMailReceiver imapMailReceiver = new ImapMailReceiver(storeUrl);
        // other setters here
     return imapMailReceiver;
}

С Spring Integration Java DSL это может выглядеть так:

    @Bean
    public IntegrationFlow imapMailFlow() {
        return IntegrationFlows
                .from(s -> s.imap("imap://user:pw@localhost:" + imapPort + "/INBOX")
                                .searchTermStrategy(this::fromAndNotSeenTerm)
                                .javaMailProperties(p -> p.put("mail.debug", "false")),
                        e -> e.autoStartup(true)
                                .poller(p -> p.fixedDelay(1000)))
                .channel(MessageChannels.queue("imapChannel"))
                .get();
    }

Также см. вопрос и его обсуждение: spring получать электронные письма без xml (с использованием аннотаций только)

person Artem Bilan    schedule 23.03.2016