SpoolManager受config.xml文件中一个单独的spoolmanager配置块控制。 spoolmanager标签定义了配置块的边界,Spoolmanager行为,最重要的是 邮件消息通过处理树的路径,由这个配置块进行控制。
spoolmanager标签有几个简单的子标签。
threads - 必需的正整型值,指定了SpoolManager用于处理缓冲池中的消息的线程数。 这个元素往往是影响性能的主要因素,所以建议在产品配置中协调该值。
mailetpackages - 必需的容器标签,包含几个mailetpackage子节点。 每个mailetpackage 元素的值都是一个Java包的名字。这些包中包含了要实例化为mailet的类。
matcherpackages - 必需的容器标签,包含几个matcherpackage子节点。 每个matcherpackage 元素的值都是一个Java包的名字。这些包中包含了要实例化为匹配器的类。
SpoolManager其余的配置元素的复杂性足以再进行一次更深入的讨论。
处理器的配置
除了上面讨论的子元素之外,spoolManager标签还可以包含几个processor 子元素, 这些子元素定义了SpoolManager的处理树。
每个处理器必须有一个name属性,这个属性的值对每个处理器标签来说必须是唯一的。 处理器的名字很重要,每个处理器都必须有(尤其是root和error)。处理器的名称不允许为“ghost”,因为它表示不应该再对消息进行任何处理。
James的SpoolManager在处理器的名称和邮件“状态”(在Mailet API中有对邮件状态的定义)之间创建对应关系。 任何一个mailet处理完邮件之后,SpoolManager都会检查消息的状态。如果状态改变了,那这个消息就不会继续留在当前的处理器中。 当新的状态为“ghost”时,对于这个消息的处理就完全中止了,其它任何状态都会导致消息被重新路由到与它的新状态相匹配的处理器中。
root处理器是必需的,SpoolManager在缓冲池中找到的所有新消息都会传给这个处理器。
error处理器也是必需的,在某些特定情况下James自己会把消息交给error处理器。 它还是mailet遇到错误情况时转发邮件的标准处理器。
transport和spam处理器是包含在初始配置文件中的两个非常有用的可选处理器。 这两个处理器分别包含了实际的邮件传送和垃圾处理机制。 可以在初始的config.xml文件中找到这两个处理器的详细信息。
每个处理器元素都有0或多个mailet子元素,每个都描述了一个匹配器/mailet对。 mailet子节点在配置文件中的顺序要求很严格,因为这个顺序就是邮件经过处理器中的 匹配器/mailet对的顺序。
mailet标签是SpoolManager配置的核心元素。
Mailet标签
仔细观察下面这个简单的mailet 标签:
spam
mailet标签有两个必需的属性,match和class。
match属性的值是带有可选参数的指定匹配器类。如果有参数的话,参数和匹配器类名之间用一个‘=’分隔。 语义上的解释是参数是左边那个特定的mailet的。
class属性的值是要实例化的 Mailet 类。
最终,mailet标签的子元素定义了传送给Mailet的配置信息。包含在这一部分里的标签不应该带有属性或子节点, 这些元素的名称和主体部分将会以(名称,值)对的方式传给mailet。
所以在上面的例子中,将会实例化一个RemoteAddrNotInNetwork的匹配器实例,并且“127.0.0.1”会作为参数传给这个匹配器。 这个对中的Mailet是ToProcessor的实例,传送给它的(名称,值)对是("processor", "spam")。
James发布包中已经包含了一些Mailets和匹配器。 这里是James提供的Mailets的列表。 这里是James提供的匹配器的列表,