James邮件服务器简介与配置

一. James简介
Java Apache邮件服务器一般是指Apache组织开发的James,它是一个轻便的、安全的100%纯Java实现的邮件服务器。不仅如此James还可以提供更多的功能,感谢James给我们提供了插件化协议架构和mailet底层构造,它可以让我们利用web服务器的servlets处理邮件。Email服务到处都是,开始是DARPA(国防部高级研究计划局)的一个计划并最终发展为Internet,但是James成为了打破这一传统规则的第一个应用。
The Java Apache 企业邮件服务器(a.k.a. Apache James)是一个100%用Java实现的SMTP和POP3邮件服务器,同时,他还实现了NNTP新闻服务器的功能。James被设计成一个完整的、可移植的企业邮件引擎解决方案,他完全基于目前可用的开放性协议。James还是一个邮件应用平台。Apache组织提供了一套Java API-mailet API,利用mailet API,可以根据自己的需要用Java语言编写代码来对邮件进行个性化的处理。mailet可以生成一个自动回复,更新数据库,阻止垃圾邮件,建立消息档案,或者任何我们能想像的到的功能。与mailet密切相关的是消息适配器(matcher),一个消息适配器可以判断mailet是否要对服务器中的一个邮件进行处理。
James项目提供了Mailet API和一个邮件应用平台API的实现。他建立在Apache Avalon 应用框架(关于Avalon -http://avalon.apache.org/)的基础之上。
二、 James组成
James是一个支持多种协议的消息处理和存储引擎,目前由以下几个部分组成:
1. 两个邮件服务器(SMTP和POP3)
2. 一个远程管理服务器
3. 一个NNTP服务器
4. 一个支持Mailet API的邮件处理引擎
5. 一个文件系统消息存储机制和一个关系型数据库消息存储机制接口
6. 文件系统用户记录存储机制和一个试用的LDAP目录存储接口
7. 支持POP3和远程管理的TLS(SSL)连接
8. 支持SMTP认证
三、James的设计目标
James被设计为实现几个确定的目标。比如它完全使用Java开发以便适应最大的轻便行;它提供了很多安全特性用于保护服务器的运行环境安全还提供了安全服务。James是多线程的,它使用了很多Avalon架构提供的功能。
James提供了完善的服务,包括一个完全可以运行的Email服务器。这些服务主要是有Macther和MailetAPI实现的,这两个API提供了Email检查和处理功能。James支持标准的email协议(SMTP,POP3,IMAP),另外还提供了一些附加功能,它使用了松散耦合的插件设计方式使消息框架从协议中抽象出来。这种设计方式非常有用,你可以把James当作一个通常的消息服务器或者为即时消息传输提供支持。
James一个更重要的设计目标是提出了mailet概念,mailet提供了一个开发邮件应用程序的完整生命周期。当然你也可以在这里使用其他MTA(邮件传输代理),比如SendMail,要这样作的话你需要提供一个可调用的程序然后将数据传送给它来完成工作,不过,James提供了一套更简单、通用的API来完成这些工作。下面让我们来更进一步的了解Matcher和MailetAPI。
四、James的安装与配置
1. 准备环境
1) 到Apache官网(http://james.apache.org/)上下载最新版本的James,我下载的是apache-james-2.3.2.zip。
2) 到oracle官网上下载最新版的jdk,下载地址是:(http://java.sun.com/javase/downloads/index.jsp)。
3) 将下载好的jdk安装,并解压下载好的apache-james-2.3.2.zip。
2. 系统环境变量的配置
1) 新建系统环境变量JAVA_HOME = C:\Program Files\Java\jdk1.6.0_25。
2) 新建系统环境变量 PATH = %JAVA_HOME%\bin;
3) 新建系统环境变量 CLASSPATH = %JAVA_HOME%\lib;,;
3. 启动james
1) 启动方式 \james-2.3.2\bin\run.bat
2) 启动成功后的界面 如图1.0

图1.0  james运行界面
3) 关闭的时候可以采用 ctrl + C
4. james 系统环境配置
1) James的三种数据存储方式
a) File    以文件方式储存 
b) Db     以数据库 
c) Dbfile  消息头用数据库方式存放,把消息体用文件方式存放 
2) 找到james配置文件\james-2.3.2\apps\james\SAR-INF\config.xml(如果没有这个文件请先运行james程序)
3) 修改James Server 主机名称默认的是localhost
a) 原配置
<postmaster>Postmaster@localhost</postmaster>
<servernames autodetect="true" autodetectIP="true">
<servername>localhost</servername>
</servernames>
b) 新配置
<postmaster>[email protected]</postmaster>
<servernames autodetect="true" autodetectIP="true">
<servername>mail.com</servername>
</servernames>
c) 参数说明
Autodetect :如果该属性为true 则采用自己的主机名和用户明确指定的服务器名称。否则只采用用户指定的服务器名称。
autodetectIP :如果该属性为true ,服务器允许为每个servername添加ip地址
4) 添加DNS Server:(配置域名服务器,默认的是127.0.0.1)
a) 原配置
    <dnsserver>
       <servers>
       </servers>
       <autodiscover>true</autodiscover>
       <authoritative>false</authoritative>        <maxcachesize>50000</maxcachesize>
   </dnsserver>
b) 新配置
<dnsserver> 
   <servers> 
  <server>127.0.0.1</server> 
   </servers> 
   <autodiscover>true</autodiscover> 
   <authoritative>false</authoritative> 
 </dnsserver>
5) 采用SMTP认真方式
a)注释掉(或删除掉):
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
    <processor> relay-denied </processor>
    <notice>550 - Requested action not taken: relaying denied</notice>
  </mailet>
b)开启SMTP Server 身份验证
   <smtpserver enabled="true">
……
<authRequired>true</authRequired>
……
</smtpserver>
6)修改用户名和密码
a) 原配置
<remotemanager enabled="true">
……
<account login="root" password="root"/>
……
</remotemanager>
b) 新配置
<remotemanager enabled="true">
……
<account login="username" password="123456"/>
……
</remotemanager>
7)修改邮件信息存储位置
解释:
spool里面是存放的正在处理的信件,而inbox里面是存放的已发送邮件。
数据库描述文件放在:\james-2.1.3\apps\james\conf\sqlresources.xml
下面以MySql为例配置James
a) 用户信息存储位置修改
1. 注释掉
<users-store>
    <!--
<repository   name="LocalUsers"
      class="org.apache.james.userrepository.UsersFileRepository">
<destination URL="file://var/users/"/>
   </repository>
   -->
</users-store>
2. 取消注释部分
<users-store>
<repository   name="LocalUsers"
class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users">
         <sqlFile>file://conf/sqlResources.xml</sqlFile>
    </repository>
</users-store>
b) 日志信息存到数据库中
1. 原配置
<processor name="error">
   <mailet match="All" class="ToRepository">
     <repositoryPath> file://var/mail/error/</repositoryPath>
     <!--
     <repositoryPath> db://maildb/deadletter/error </repositoryPath>
     -->
    </mailet>
     </processor>
*******************************************************
<spoolrepository destinationURL="file://var/mail/spool/" type="SPOOL"/>
<!--
<spoolrepository destinationURL="db://maildb/spool/spool" type="SPOOL"/>
-->
2. 新配置
<processor name="error">
   <mailet match="All" class="ToRepository">
<!--    
<repositoryPath> file://var/mail/error/</repositoryPath>
   -->
     <repositoryPath> db://maildb/deadletter/error </repositoryPath>
    </mailet>
     </processor>
*******************************************************
<!--
<spoolrepository destinationURL="file://var/mail/spool/" type="SPOOL"/>
-->
<spoolrepository destinationURL="db://maildb/spool/spool" type="SPOOL"/>
c) 配置正在处理的邮件信息到数据库
1. 原配置
<mailet match="All" class="RemoteDelivery">
     <outgoing> file://var/mail/outgoing/ </outgoing>
     <!--
       <outgoing> db://maildb/spool/outgoing </outgoing>
         -->
……
</mailet>
2. 新配置(去掉数据库的注释)
<mailet match="All" class="RemoteDelivery">
     <!--
<outgoing> file://var/mail/outgoing/ </outgoing>
     -->
       <outgoing> db://maildb/spool/outgoing </outgoing> 
……
</mailet>
d) 配置数据库连接(不要忘了将数据库驱动添加到james-2.3.2\lib包下面)
取消下面的注释(要现在数据库中新建一个mail数据库)
1. 原配置
<database-connections>
   <!--
      <data-source name="maildb"
class="org.apache.james.util.dbcp.JdbcDataSource">
         <driver>com.mysql.jdbc.Driver</driver>
         <dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
         <user>username</user>
         <password>password</password>
         <max>20</max>
      </data-source>
      -->
</database-connections>
2. 新配置
<database-connections>
      <data-source name="maildb"
class="org.apache.james.util.dbcp.JdbcDataSource">
         <driver>com.mysql.jdbc.Driver</driver>
         <dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
         <user>username</user><!—自己数据库的用户名-->
         <password>password</password><!—自己数据库的密码-->
         <max>20</max>
      </data-source>
</database-connections>
e) 配置收件箱到数据库
     取消这段代码的注释
  <inboxRepository>
         <repository destinationURL="db://maildb/inbox/" type="MAIL"/>
      </inboxRepository>
注释掉
  <!--
  <inboxRepository>
     <repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
  </inboxRepository>
-->
5.添加用户信息
1. 在命令提示符中输入telnet localhost 4555 回车
注意:(在Windows 7下安装Telnet和Windows Server 2008略有不同,大家可以通过下面的操作方法实现。依次点击“开始”→“控制面板”→“程序”,“在程序和功能”找到并点击“打开或关闭Windows 功能”进入Windows 功能设置对话框。找到并勾选“Telnet客户端”和“Telnet服务器”,最后“确定”稍等片刻即可完成安装。除此之外,我们也可通过该向导安装 “TFTP客户端”、“Internet 信息服务”等。)
其中localhost也可以换成IP,4555是端口号。登录时需要用户名和密码,开始默认的用户名和密码均为root。若登录成功,提示如下:
  JAMES Remote Administration Tool 2.1
  Please enter your login and password
  Login id:
  2. 此时输入root用户名,然后会出现:
   Password:
  3. 输入密码root
  注意:在有些操作系统如Windows2000上,用户输入均不显示。
  
  telnet命令列表:
  
  help ---------------------------------------------显示帮助
  Listusers ----------------------------------------列出目前存在的账户
  Countusers -------------------------------------显示目前存在的账户的数量
  addusers [用户名] [密码] -----------------------添加新用户
  verify [用户名] ----------------------------------验证特定用户是否存在
  deluser [用户名]---------------------------------删除已存在用户
  setpassword [用户名] [密码] -------------------设置某一用户的密码
  setalias [别名] [用户名] -----------------从本地将[别名]的所有邮件转寄[用户名]
  unsetalias [别名] -------------------------------取消setalias设置
  setforwarding [用户名] [email地址] ----将[用户名]的邮件转寄指定[email地址]
  unsetforwarding [用户名] ----------------------取消setforwarding设置
  user [资源]--------------------------------------变为另一用户的资源
  shutdown--------------------------------------停止当前James邮件服务的JVM程序(对于James为后台服务时,用此命令很方便)
  Quit ---------------------------------------------断开telnet连接

猜你喜欢

转载自shiguanghui.iteye.com/blog/1962313