AliKevin 写道
The Apache James Project delivers a rich set of open source modules and libraries, written in Java, related to Internet mail communication which build into an advanced enterprise mail server.
- James-Hupa
Apache James Hupa 是基于交互式邮件存取协议之上的GWT开发包,我们可以基于GWT进行WebMail的开发。
插件:[开发插件|http://dl.google.com/eclipse/plugin/3.7]
注:IMAP(Internet Mail Access Protocol)(交互式邮件存取协议)IMAP是斯坦福大学在1986年开发的研发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等
- James-Protocols
Apache James Protocols 项目是一个轻量级高度可扩展的邮件协议框架,他可以于任何socket实现进行集成。
注:以后的协议层性能调优可以考虑用NIO或者用mina进行强化。
James应用该项目实现SMTP服务。
- James-IMAP
Apache James IMAP 项目提供了对IMAP、简单数据访问的编码实现。
在James3中应用该项目实现了IMAP服务。
IMAP(Internet Mail Access Protocol)(交互式邮件存取协议)IMAP是斯坦福大学在1986年开发的研发的一种邮件获取协议。它的主要作用是邮件客户端(例如MS Outlook Express)可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等.
- James-Mailets
Apache James Mailets 项目为james提供了操作mail的可扩展开发的API,它为开发e- mail应用程序提供了一个基于组件生命周期和容器的解决方案。类似于servlet,mailet程序可以部署到任何mailet容器中。
James 的很多特性是通过Mailet API 实现的,熟悉Servlet API的开发者可能会觉得奇怪,它看起来很眼熟。Mailet接口支持两个生命周期方法,一个提供初始化(init() 方法),一个停止服务(destroy() 方法)。还有两个返回信息的方法,getMailetInfo(), 返回一个包含作者、版本、该mailet的版权等信息的字符串对象,getMailetConfig()很实用,它返回mailet的配置信息。init()方法有一个MailetConfig对象作为参数,虽然这个对象可能被修改,但它通常是由getMailetConfig()提供的。
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应用程序的类型的概念。
1. 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数据源进行更复杂的别名翻译 |
UseHeaderRecipient 从消息的头信息中重建邮件的接收者 |
ServerTime 发送一个带有服务器时间戳的消息 |
PostmasterAlias 将 postmaster@ 的消息转发到一个个人的地址中 |
AddHabeasWarrantMark 给消息添加一个Habeas Warrant标记 |
AvalonListserv 提供一个基本的目录服务器功能 |
AvalonListservManager 处理目录服务器的管理命令 |
从这个列表可以看出,有几个James所支持的特性要归功于Mailet API,包括复杂的目录服务器支持、别名、存储和路由能力。
2.James-MatchersAPI也是James的重要成员, James自带了一些标准的匹配器(matchers)。它们全都实现了Matcher API:
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 匹配目录服务器的命令 |
- James-Mailbox
Apaehe James Mailbox项目是一为各种邮件协议提供灵活存储和访问管理的API。目前支持MailDir, Database (via JPA) and JCR等存储。
James的Repository机制灵活,以Spring的注入方式可以任意配置扩展。
目前支持的Repository 1.JPA:DB 2.MailDir:File System,MUA(MAIL USER AGENT)An MUA can read and delete messages while new mail is being delivered: each message is stored in a separate file with a unique name, so it isn't affected by operations on other messages. An MUA doesn't have to worry about partially delivered mail: each message is safely written to disk in the tmp subdirectory before it is moved to new. The maildir format is reliable even over NFS 3.Jcr:(jackrabbit)Jackrabbit is content repository,it is a fully conforming implementation of the Content Repository for Java Technology API (JCR, specified in JSR 170 and 283). A content repository is a hierarchical content store with support for structured and unstructured content, full text search, versioning, transactions, observation, and more. 4.memeory 5.queue
JAMES-Mailbox存储方式接口如下:
- James-Mime4j
Apache James Mime4J 提供 对MIME类型邮件数据和RFC822格式邮件的解析。
- James-jSPF
Apache James jSPF是SPF规范的Java实现.jSPF是一种防止伪造email的发件人地址,从服务器端防止垃圾邮件的一种规范。反欺诈的实现。
SPF:寄件人来源认定,在SPF体系中,每个需要发送电子邮件的企业在其对外发布的DNS域名记录中,列出自己域名下需要发送邮件的所有IP地址段;
而接收到邮件的服务器则根据邮件中发件人所属的域名,查找该企业发布的合法IP地址段,再对照发送邮件的机器是否属于这些地址段,就可以判别邮件是否伪造的。
SPF规范| http://mail.zsnc.net:1080/aboutspf.htm
例如:邮箱kevin@126.com的用户通过126.com的邮件服务器220.181.15.43向我们的邮件系统发信,我们通过域名解释服务查找域名126.com发布的IP地址段,发现有两条:220.181.12.0/22和202.108.5.0/24,包含220.181.15.43,因此判定这封邮件是真实的;假如该用户从其他地址发送邮件,那么我们探测到的发件机器IP就很可能不属于上述两个地址段,将被判为假冒邮件。
- James-MPT
Apache James Mail Protocol Tester (MPT) is a framework for the scritable functional testing of ASCII based line protocols
James-Postage
Apache James Postage 是一个对支持 POP3 and SMTP.邮件协议的邮件服务器进行测试的框架。
Postage 可以记录James 的资源情况,发现资源瓶颈。如发现内存泄露。
- 本篇结束.