主题过滤器读取Mulesoft中的入站POP3连接器

时间:2017-03-02 06:37:15

标签: mule pop3 connector

我们使用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。

请您提供宝贵的建议。

谢谢你, 拉吉

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
    }

}