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