33.16. 使用自定义搜索终端
您可以在 MailEndpoint 上配置 searchTerm,它允许您过滤掉不需要的邮件。
例如,在 Subject 或 Text 中过滤要包含 Camel 的邮件,如下所示:
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/> <to uri="bean:myBean"/> </route>
<route>
<from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
<to uri="bean:myBean"/>
</route>
请注意,我们使用 "searchTerm.subjectOrBody" 作为参数键表示,我们希望在邮件主体或正文上搜索包含单词 "Camel"。
类 org.apache.camel.component.mail.SimpleSearchTerm 具有多个选项,您可以配置:
或者让新的不可预见的电子邮件恢复 24 小时,您可以做。注意"now-24h"语法。详情请查看下表。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/> <to uri="bean:myBean"/> </route>
<route>
<from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
<to uri="bean:myBean"/>
</route>
您可以在 endpoint uri 配置中有多个 searchTerm。然后,它们将使用 AND 运算符来合并,例如,这两个条件都必须匹配。例如,要获取最后 24 小时发出的未观察电子邮件,该电子邮件在邮件主题中有 Camel,您可以执行以下操作:
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/> <to uri="bean:myBean"/> </route>
<route>
<from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
<to uri="bean:myBean"/>
</route>
SimpleSearchTerm 设计为可以从 POJO 中轻松配置,因此您也可以使用 XML 中的 <bean> 样式进行配置
<bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm"> <property name="subject" value="Order"/> <property name="to" value="acme-order@acme.com"/> <property name="fromSentDate" value="now"/> </bean>
<bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
<property name="subject" value="Order"/>
<property name="to" value="acme-order@acme.com"/>
<property name="fromSentDate" value="now"/>
</bean>
然后,您可以使用 Camel 路由中的 #beanId 引用此 bean,如下所示:
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/> <to uri="bean:myBean"/> </route>
<route>
<from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
<to uri="bean:myBean"/>
</route>
在 Java 中,有一个 builder 类可用于使用 org.apache.camel.component.mail.SearchTermBuilder 类来构建复合 SearchTerms。这可让您构建复杂术语,例如: