Я пытаюсь получать электронные письма с сервера gmail, а затем как-то их обрабатывать. Таким образом, каждый раз, когда новое почтовое сообщение поступает на почтовый сервер, мое приложение должно загружать его и обрабатывать, это означает, что другие службы будут вызываться асинхронно, которые будут регистрироваться как слушатели.
Я совсем новичок в весенней интеграции, и я не до конца понимаю, как она работает или она правильная.
1) Пока у меня есть этот код - Я могу прочитать все электронные письма, но я не уверен, обрабатываются ли они асинхронно или нет, или это правильный путь?
ListeningExample class
@Configuration
public class ListeningExample {
@Bean
public HeaderMapper<MimeMessage> mailHeaderMapper() {
return new DefaultMailHeaderMapper();
}
@Bean
public IntegrationFlow imapMailFlow() {
IntegrationFlow flow = IntegrationFlows
.from(Mail.imapInboundAdapter("imap://user:pwd@imap.gmail.com/INBOX")
.userFlag("testSIUserFlag")
.javaMailProperties(javaMailProperties()),
e -> e.autoStartup(true)
.poller(p -> p.fixedDelay(5000)))dostane to detailni zpravy
.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;
}
}
MailRecieverService class
@Service
public class MailRecieverService {
private List<EmailAction> services;
@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());
//Processing emails do with them something..
for (EmailAction emailAction : services) {
emailAction.performAction(null);
}
}
};
return messageHandler;
}
}
Основной класс
@SpringBootApplication
@EnableIntegration
public class Main extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Main.class);
}
public static void main(String[] args) throws Exception {
SpringApplicationBuilder builder = new SpringApplicationBuilder(Main.class);
builder.headless(false).run(args);
}
}
2) Есть ли возможность в весенней загрузке перемещать / удалять электронные письма, создавать папки, и выполняете ли другие действия с учетной записью электронной почты или мне нужно использовать библиотеку javax.mail
самостоятельно? Если да, не могли бы вы привести несколько примеров?