30.16. 使用自定义搜索终端
您可以在 MailEndpoint
上配置 搜索
终端,以便您过滤出不需要的邮件。
例如,要过滤 mails 以在 Subject 或 Text 中包含 Camel,您可以执行以下操作:
<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>
您可以在 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>
SimpleSearchTerm
旨在从 OVA 中轻松配置,因此您还可以使用 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>
然后,您可以使用 Camel 路由中的 #beanId 来引用这个 bean,如下所示:
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/> <to uri="bean:myBean"/> </route>
在 Java 中,有一个构建器类,可使用 org.apache.camel.component.mail.SearchTermBuilder
类来构建复合搜索终端。这可让您构建复杂的术语,例如:
// we just want the unseen mails which is not spam SearchTermBuilder builder = new SearchTermBuilder(); builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam") // which was sent from either foo or bar .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com"); // .. and we could continue building the terms SearchTerm term = builder.build();