Тематический фильтр при чтении входящего соединителя POP3 в Mulesoft

Мы используем коннектор 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.

Не могли бы вы предоставить ваши ценные предложения.

Спасибо, Радж


person Rajendar Pilli    schedule 02.03.2017    source источник


Ответы (1)


Существует несколько способов фильтрации писем по определенной теме:

<сильный>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 Шаблоны интеграции: фильтр сообщений :

Используйте специальный тип маршрутизатора сообщений, фильтр сообщений, чтобы исключить нежелательные сообщения из канала на основе набора критериев.

Пример потока:

<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. Создайте собственный фильтр

Создайте класс Java, который реализует «Фильтр» и оцените, соответствует ли тема вашим критериям. Приведенные ниже примеры взяты из статьи Как добавить пользовательский фильтр к конечной точке входящей электронной почты и обратиться к IMAP, но это должно быть похоже на POP3.

XML-конфигурация:

<flow name="main">
    <imaps:inbound-endpoint connector-ref="imapsConnector" user="[email protected]" 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
    }

}
person CountD    schedule 03.03.2017