我们使用POP3连接器作为入站来阅读电子邮件以启动流程。
<pop3s:inbound-endpoint doc:name="Poll emails" host="${email.host}" password="${email.password}" port="${email.port}" responseTimeout="10000" user="${email.user}"/>
但这是在阅读所有发送到INBOX的电子邮件,我们是否可以在阅读并发送到流程之前限制选择阅读的电子邮件?
意味着,我们可以在POP3连接器上应用任何过滤器,向电子邮件服务器发送请求以阅读具有Spacific主题的邮件。 Mule Runtime是3.8 / Anypoint Studio是6.1。
请您提供宝贵的建议。
谢谢你, 拉吉
答案 0 :(得分:0)
有多种方法可以过滤特定主题的电子邮件:
<强> 1。使用特定于电子邮件传输的过滤器
MuleSoft为入站点电子邮件传输(POP3,SMTP,IMAP)提供了两种实现:
org.mule.providers.email.filters.AbstractMailFilter:必须由任何其他邮件过滤器扩展的基本过滤器实现。
org.mule.providers.email.filters.MailSubjectRegExFilter:将正则表达式应用于邮件主题。
例如,您可以通过以下方式定义MailSubjectRegExFilter
:
<flow>
<pop3s:inbound-endpoint doc:name="Poll emails" host="${email.host}" password="${email.password}" port="${email.port}" responseTimeout="10000" user="${email.user}"/>
<custom-filter class="org.mule.transport.email.filters.MailSubjectRegExFilter" doc:name="Custom">
<message-property-filter pattern="subject=mySubject" caseSensitive="true" doc:name="Message Property"/>
</custom-filter>
...
</flow>
更多信息可在以下MuleSoft文档中找到:
<强> 2。使用邮件过滤器
来自MuleSoft的博文Integration Patterns: Message Filter:
使用特殊类型的消息路由器(消息过滤器)根据一组标准消除来自频道的不需要的消息。
样本流程:
<flow name="flowWithFilter">
<jms:inbound-endpoint queue="inQueue"/>
<message-filter onUnaccepted="DeadLetterQueueFlow" throwOnUnaccepted="false">
<expression-filter evaluator="xpath" expression="/order/@type = 'book'">
</message-filter>
<jms:outbound-endpoint queue="outQueue"/>
</flow>
查看文章以获取更多示例和配置。
第3。构建自定义过滤器
Crear一个Java类,实现&#34; Filter&#34;并评估受试者是否符合您的标准。以下示例摘自文章How to add a custom filter to an email inbound endpoint并参考IMAP,但POP3应该类似。
XML配置:
<flow name="main">
<imaps:inbound-endpoint connector-ref="imapsConnector" user="someAccount@gmail.com" password="theAccountPassword" host="imap.gmail.com" port="993" doc:name="IMAP">
<message-filter>
<custom-filter class="filters.MyCustomEmailFilter" />
</message-filter>
</imaps:inbound-endpoint>
<logger level="INFO" message="Email matched filter, do processing..." doc:name="Logger" />
</flow>
过滤类:
public class MyCustomEmailFilter implements Filter {
@Override
public boolean accept(MuleMessage message) {
MimeMessage emailMessage = (MimeMessage) message.getOriginalPayload();
try {
return customEvalLogic(emailMessage);
} catch (MessagingException e) {
throw new MuleRuntimeException(e);
}
}
private boolean customEvalLogic(MimeMessage emailMessage) throws MessagingException {
return emailMessage.getSubject().contains("order"); // Please define custom email filter criteria here
}
}