在Spring Integration中进行轮询时如何根据主题过滤电子邮件

时间:2017-09-20 21:31:46

标签: java spring javamail spring-messaging spring-integration-dsl

我想根据主题调查电子邮件。

如果我们想轮询主题为“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并尝试使用过滤器。但是不确定如何找到解决方案。

1 个答案:

答案 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();
}