2017-03-02 1 views
0

Wir verwenden den POP3-Konnektor als Eingang, um die E-Mail zu lesen, um den Nachrichtenfluss zu starten.Betrefffilter beim Lesen des eingehenden POP3-Konnektors in Mulesoft

<pop3s:inbound-endpoint doc:name="Poll emails" host="${email.host}" password="${email.password}" port="${email.port}" responseTimeout="10000" user="${email.user}"/> 

Aber das ist es, alle E-Mails lesen, die Inbox geliefert werden, können wir beschränken die E-Mail wählen sein, lesen, bevor wir zum Fluss lesen und geschickt?

Bedeutet, können wir jeden Filter auf POP3-Connector anwenden, um eine Anfrage an den E-Mail-Server zu senden, um die Mails mit Spacific Betreff zu lesen. Mule Runtime ist 3.8/Anypoint Studio ist 6.1.

Könnten Sie bitte Ihre wertvollen Vorschläge zur Verfügung stellen.

Danke, Raj

Antwort

0

Es gibt eine Reihe von Möglichkeiten, E-Mails mit einem bestimmten Thema zu filtern:

1. Verwenden Sie E-Mail-Verkehr spezifische Filter

MuleSoft bietet zwei Implementierungen für eingehende -Enpoint-E-Mail-Transporte (POP3, SMTP, IMAP):

  • org.mule.providers.email.filters.AbstractMailFilter: Eine Basisfilterimplementierung, die von einem anderen E-Mail-Filter erweitert werden muss.

  • org.mule.providers.email.filters.MailSubjectRegExFilter: Wendet einen regulären Ausdruck einer Mail-Nachricht Thema.

Zum Beispiel können Sie ein MailSubjectRegExFilter in folgenden Weise definieren:

<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> 

Weitere Informationen finden Sie in der folgenden MuleSoft Dokumentation:

2.es Verwenden Sie die Message Filter

Von Blogeintrag der MuleSoft Integration Patterns: Message Filter:

Verwenden Sie eine spezielle Art von Message Router, ein Message Filter, unerwünschte Nachrichten von einem Kanal auf Basis zu eliminieren auf einem Satz von Kriterien.

Ein Probenstrom:

<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> 

Überprüfen Sie den Artikel für weitere Beispiel und Konfigurationen.

3.Erstellen Sie einen benutzerdefinierten Filter

Crear eine Java-Klasse, die "Filter" implementiert und bewerten, ob das Thema Ihre Kriterien erfüllt. Die folgenden Beispiele stammen aus dem Artikel How to add a custom filter to an email inbound endpoint und beziehen sich auf IMAP, sollten aber für POP3 ähnlich sein.

XML-Konfiguration:

<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> 

Filterklasse:

 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 
    } 

}