Как я могу получать почту с помощью Spring Integration? - PullRequest
0 голосов
/ 25 мая 2020

Я хочу получать электронную почту с помощью Spring Integration. Это мой класс конфигурации:

@Configuration
public class ListeningConfig {

    @Bean
    public HeaderMapper<MimeMessage> mailHeaderMapper() {
        return new DefaultMailHeaderMapper();
    }

    @Bean
    public IntegrationFlow imapMailFlow() {
        Properties props = new Properties();
        props.setProperty("mail.debug", "true");
        props.setProperty("mail.imap.ssl.enable", "true");

        IntegrationFlow flow =  IntegrationFlows
                .from(Mail.imapInboundAdapter("imap://user:password@imap.yandex.ru:993/INBOX")
                                .javaMailProperties(props),
                        e -> e.autoStartup(true)
                                .poller(p -> p.fixedDelay(5000)))
                .transform(Mail.toStringTransformer())

                .channel(MessageChannels.queue("imapChannel"))
                .get();
        return flow;
    }


    @Bean(name = PollerMetadata.DEFAULT_POLLER)
    public PollerMetadata defaultPoller() {
        PollerMetadata pollerMetadata = new PollerMetadata();
        pollerMetadata.setTrigger(new PeriodicTrigger(1000));
        return pollerMetadata;
    }
}

Это мой сервис:

@Service
public class MailReceiverService {

    @Bean
    @ServiceActivator(inputChannel = "imapChannel")
    public MessageHandler processNewEmail() {
        MessageHandler messageHandler = new MessageHandler() {

            @Override
            public void handleMessage(org.springframework.messaging.Message<?> message) throws MessagingException {
                System.out.println("New email:" + message.toString());
                MessageHeaders headers = message.getHeaders();
                String subject = (String) headers.get(MailHeaders.SUBJECT);
                Long orderId = Long.parseLong(subject.substring(subject.indexOf("№ ")+2));
                System.out.println(orderId);
            }
        };
        return messageHandler;
    }

}

Когда я отправляю письмо от себя, приведенный выше код отлично работает. Когда я отправляю письмо из других доменов, я вижу в журнале действие, связанное с получением почты, но служба не работает. Когда я комментирую строку .transform(Mail.toStringTransformer()), служба работает, но письмо имеет странный формат. Кажется, это связано с шифрованием, но решения я не нашел. Пожалуйста помоги. Спасибо.

...