JAMES组件简介

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 的资源情况,发现资源瓶颈。如发现内存泄露。

  • 本篇结束.

猜你喜欢

转载自alikevin2011.iteye.com/blog/1174140