企业级邮件服务器Apache James介绍(1)列表6. JamesConfigTest运行时的输出 =========================================== Clear INBOX for red@localhost Clear INBOX for green@localhost Clear INBOX for blue@localhost SENDING message from red@localhost to blue@localhost SENDING message from green@localhost to blue@localhost Show and Clear INBOX for blue@localhost From: green@localhost Subject: Testing blue from green Content: This is a test message From: red@localhost Subject: Testing blue from red Content: This is a test message =========================================== 这表明我们的James安装是成功的;在进行开发之前你需要按这种方式设置你的系统。然而,我们在这个系列的第二部分之前不会谈论到开发的问题。在这篇文章的剩余部分,我们将研究一下Matcher和Mailet API,以及随James发布版本一起提供的现成的匹配器和mailets。我们还将快速浏览一下James支持的其它特性。 匹配器 James自带了一些标准的匹配器(matchers)。它们全都实现了Matcher API,如列表7所示,并且提供了现有的MTA一般都有的功能,还提供了一些实用的扩展功能。这个接口非常简单;它包含了一对生命周期方法,init() 和 destroy() ,还有一对记录方法getMatcherInfo() 和 getMatcherConfig(),以及一个主方法,match() ,对Mail对象进行操作。Mail引用提供了容器状态的访问、邮件消息和要进行操作的元数据。 列表7. The Matcher 接口 =========================================== public interface Matcher { void init(MatcherConfig config); void destroy(); String getMatcherInfo(); MatcherConfig getMatcherConfig(); Collection match(Mail mail); } =========================================== 匹配器的任务是识别一组接收者,并返回一个代表要被mailet处理的接收者的字符串对象集合。通过结合匹配器的识别能力和mailet的处理能力,可以开发出复杂的e-mail消息处理应用程序。 随James一起发布的匹配器使你无需开发自己的匹配器就能做一些事情。在决定开始开发自己的匹配器之前最好先了解一下这些已有的匹配器。通常的情况下,你想做的工作可能已经帮你做好了。你可以在表格1中看到这些已有的匹配器: 表格 1. James自带的匹配器(matchers) Matcher Description All 匹配所有的e-mail并返回所有的接收者 HasHeader 匹配含有指定的头信息的消息 HasAttachment 匹配带有附件的消息 SubjectStartsWith 匹配标题以指定的文本开头的消息 SubjectIs 匹配含有指定的标题消息 HostIs 匹配来自指定的主机的消息 HostIsLocal 匹配本机产生的消息 UserIs 匹配指定的用户的消息 SenderIs 匹配指定的发送者的消息 SenderInFakeDomain 匹配发送者的主机地址不能解析的消息 SizeGreaterThan 匹配比指定的限制大的消息 Recipients 匹配接收者在指定的列表中的消息 RecipientsLocal 匹配接收者在本地的消息 IsSingleRecipient 匹配仅有一个接收者的消息 RemoteAddrInNetwork 匹配来自指定的IP地址、域等列表的消息 RemoteAddrNotInNetwork 匹配不是来自指定的IP地址、域等列表的消息 RelayLimit 匹配转发次数大于指定的服务器数的消息。 InSpammerBlackList 与mail-abuse.org提供的列表中的地址匹配 NESSpamCheck 采用得自Netscape Mail Server的方法匹配垃圾邮件 HasHabeasWarrantMark 采用Habeas Warrant匹配邮件 FetchedFrom 与FetchPOPMatches所用的 X-fetched-from 头信息匹配 CommandForListserv 匹配目录服务器的命令 正如你在表中所看到的,你不用编写任何新的代码就可以完成很多任务了,包括诸如匹配头、主题、接收者这样的原子级任务,以及像检测垃圾邮件和处理目录服务器命令这样的高层任务。 Mailets James' 的很多特性是通过列表8中Mailet API 实现的,熟悉Servlet API的开发者可能会觉得奇怪,它看起来很眼熟。与Matcher API一样,Mailet接口支持两个生命周期方法,一个提供初始化(init() 方法),一个停止服务(destroy() 方法)。还有两个返回信息的方法,getMailetInfo(), 返回一个包含作者、版本、该mailet的版权等信息的字符串对象,getMailetConfig()很实用,它返回mailet的配置信息。init()方法有一个MailetConfig对象作为参数,虽然这个对象可能被修改,但它通常是由getMailetConfig()提供的。 列表 8. The Mailet 接口 =========================================== public interface Mailet { void init(MailetConfig config); void destroy(); String getMailetInfo(); MailetConfig getMailetConfig(); void service(Mail mail); } =========================================== services() 方法以一个Mail 对象为参数,完成主要的处理工作。Maile对象提供了对容器状态、邮件消息和要进行处理的元数据的访问。 表格2是James已有的mailet实现的列表,它可以给你一个James支持的特性和已有的mailet应用程序的类型的概念。 表格2. James自带的 mailets Mailet Description Null 结束e-mail消息的处理 AddHeader 给消息内容加一个文本的头信息 AddFooter 给消息内容加一个文本的脚信息 Forward 将消息转发给列表中的接收者 Redirect 提供可配置的转发服务 ToProcessor 将e-mail处理转发给一个指定的处理器 ToRepository 将消息复制到指定的目录下 NotifySender 将消息作为附件转发给原始的发送者 NotifyPostmaster 将消息作为附件转发给postmaster RemoteDelivery 管理SMTP主机的发送 LocalDelivery 将消息发送到本地邮箱 JDBCAlias 使用JDBC数据源进行别名翻译 JDBCVirtualUserTable 使用JDBC数据源进行更复杂的别名翻译 上一篇:如何用Apache James把E-mail从内网(内部局域网)发到外网(如263.net,hotmail.com) 下一篇:用apache james做简单的垃圾邮件过滤网关 更多相关文章
|
推荐文章
精彩文章
|