我想根据主题调查电子邮件。
如果我们想轮询主题为“Test”的电子邮件,下面的代码会抓取所有电子邮件。但我们需要过滤主题为“Test”的邮件。
如何根据主题进行过滤?
@Configuration
@EnableIntegration
public class PollSubjectEmail {
@Bean
public IntegrationFlow pop3MailFlow() {
return IntegrationFlows
.from(Mail.pop3InboundAdapter(“xxx.host.com", pop3Port, “username”, “password”)
.javaMailProperties(p -> p.put("mail.debug", "true")),
e -> e.autoStartup(true).poller(Pollers.fixedDelay(6000)))
.enrichHeaders(s -> s.headerExpressions(h -> h.put(MailHeaders.SUBJECT, "payload.subject")
.put(MailHeaders.FROM, "payload.from[0].toString()")))
.channel("pop3Channel").get();
}
}
我正在使用pop3Channel并尝试使用过滤器。但是不确定如何找到解决方案。
答案 0 :(得分:1)
我知道这是一个非常老的问题,请回答此问题,因为它对有相同要求的任何人都会有所帮助。
使用MailInboundChannelAdapterSpec#selectorExpression(“某些表达式在此处”)
@Bean
public IntegrationFlow pop3MailFlow() {
return IntegrationFlows
.from(Mail.pop3InboundAdapter("xxx.host.com", pop3Port, “username”, “password”)
.javaMailProperties(p -> p.put("mail.debug", "true")
/* Add the expression as below*/
.selectorExpression("subject matches '(?i).*Test.*'")),
e -> e.autoStartup(true).poller(Pollers.fixedDelay(6000)))
.enrichHeaders(s -> s.headerExpressions(h -> h.put(MailHeaders.SUBJECT, "payload.subject")
.put(MailHeaders.FROM, "payload.from[0].toString()")))
.channel("pop3Channel").get();
}