如何在 Spring Integration 中轮询时根据主题过滤电子邮件
Posted
技术标签:
【中文标题】如何在 Spring Integration 中轮询时根据主题过滤电子邮件【英文标题】:How to filter emails based on subject while polling in Spring Integration 【发布时间】:2018-03-02 02:32:30 【问题描述】:我想根据主题对电子邮件进行投票。
如果我们想查询主题为“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】:我知道这是一个非常古老的问题,回答这个问题对任何有相同要求的人都有帮助。
使用MailInboundChannelAdapterSpec#selectorExpression("some expression goes here")
@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();
【讨论】:
以上是关于如何在 Spring Integration 中轮询时根据主题过滤电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Integration 中动态注册 Feed Inbound Adapter?
如何在 Spring Integration DSL 中为通道设置多个消息处理程序?
Spring Integration:如何增加对传入消息的处理
如何使用 Spring Integration 发送 gcm xmpp 消息?