Я хочу получать электронную почту с помощью 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())
, служба работает, но письмо имеет странный формат. Кажется, это связано с шифрованием, но решения я не нашел. Пожалуйста помоги. Спасибо.