FetchPOP 的配置
FetchPOP受config.xml文件中的fetchpop配置块控制。fetchpop标签定义了配置块的边界, 它包含所有FetchPOP任务日程安排的相关配置。这个标签的属性或其子标签决定了FectchPOP的行为。
这个标签有一个可选的布尔属性- enabled -定义了这个服务是否处于活动状态。如果该属性不存在,则取默认值“true”。
fetchpop标签中唯一允许出现的是fetch元素。 这些fetch标签中的每一个都定义了一个单独的FetchPOP任务。
fetch标签有一个必需的属性--name。 每个FetchPOP任务的名称必须是唯一的。
除了name属性,fetch标签还有4个子标签,它们都是必需的。
host - 所要取得的邮件所在的POP3服务器的IP地址或主机名。
user - 所要取得的邮件账号的用户名。
password - 所要取得的邮件账号的密码。
interval - 代表每次获取邮件之间的时间间隔,是一个非负整数。
处理取得的邮件时几点需要考虑的问题
这里有几个在处理取得的邮件时必须考虑的问题,比如避免循环的邮件路由。下面描述了一些假想的情节及这种情况下推荐的配置。
处理域中的所有邮件
这是FetchPOP所要完成的主要功能。 如果这个服务器要取得一个域中所有的邮件并进行最终的处理的话,那么就有足够的理由把这个域名作为一个服务器名添加到 这里所描述的servernames部分了。
这是最简单的解决方案。在James捕获并转发由很多域名注册/保留公司提供的免费的POP账号的所有邮件时,会采用这种配置。
处理域中的一部分邮件
如果在域中仅有一部分邮件(可能只是一个用户的POP账号)被James的这个实例处理, 那么确保James正确的传送发送到这个域中的邮件地址的邮件就很重要。
要过滤FetchPOP任务的日程,需要给取得的邮件添加一个头-X-fetchedby。 James提供的匹配器FetchedFrom可以检测到这个头信息。 这个匹配器可以将取得的邮件转发给为处理从一个或多个POP3账号获取的邮件而建立起来的处理器。 在每个FetchPOP任务中应该仅仅使用一次这个匹配器,因为这个匹配器会去掉匹配的头信息以防止出现答复或转发不断循环的情况。
FetchedFrom匹配器要用进行匹配操作的FetchPOP任务的名字进行配置。 通常,这个匹配器被用来将邮件转发给定制的处理器进行进一步的处理。mailet的标签应该如下所示:
fetchprocessor
其中 fetchtaskname 是被匹配的FetchPOP任务的名字,fetchprocessor是用来处理获取的邮件的处理器的名字。 获取邮件的处理器应该包含进行邮件过滤和将邮件转发到真实的本地或远程用户的mailet。可以参照 SpoolManager 配置部分 描述的方式对配置文件进行修改来实现这个目标。
捕获发送失败的邮件
需要注意的是,FetchPOP的这个第一版不能访问邮件原始的目标接收者信息,只能从消息头中获取To:地址。 因为头信息中可能包含目标接收者的别名,或者可能根本就不包含目标接收者地址(可能已经在Cc:或者Bcc:域中了), 所以James可能不能发送取得的邮件。James的下一版将要解决这个问题。但现在推荐对本地无法发送的获取邮件使用catch-all转发。
要决定头信息To:中不包含目标接收者的消息的目标接收者,可以使用FetchedFrom匹配器。 将带有这个匹配器的mailet标签放在配置文件里定义的Transpot处理器的"RecipientIsLocal"和HostIsLocal" 之间。 这个mailet标签应该使用James提供的ToProcessor mailet类来将获取的邮件转发到定制的处理器中。 这样FetchPOP所取得的、不能映射到本地邮件账号的所有邮件就会经受进一步的处理,允许执行更复杂的发送操作。
安全起见,你应该在自己的获取邮件处理器的最后使用All匹配器,它能够捕获处理器中前面的mailet没有处理的所有邮件。这样你就 能确保你的配置是正确的了,而且postmaster就可以检查到任何没有正确发送的邮件了。,