(转)apache james 搭建邮件服务器

前言:我只实现了利用james来发送邮件,至于接收邮件没有测试过。

网上的资料有很多,感兴趣的话也可以搜索一下。我也是根据网上的资料,进行汇总并尝试,思考后写的文章,里面引用了网上的部分资料。无废话,开始干~

前置工作:

  1. 由于Apache James邮件服务需要用到1024以下的端口,因此请用root用户登录进行部署
  2. 需要先安装JDK1.5或以上版本,部署前请确保您的JDK环境变量如JAVA_HOME等已经设置好
  3. James 启动时,其SMTP 服务默认在 25 端口启动,POP3 服务默认在 110 端口启动, NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。 Linux下查过这些端口是否被占用的命令是:lsof -i:端口号,例如:

表示25端口被 sendmail (linux下默认的邮件服务)占用

    关闭SendMail服务: 一般RedHat的系统安装时都会默认安装了sendmail邮件服务,因此在部署ApacheJames时,需要把 sendmail关闭。可以通过以下方法来关闭sendmail,以防止系统重启时又自动启动sendmail服务。 a) 用chkconfig --list sendmail命令查看sendmail的情况 ![](http://www.myexception.cn/img/2013/11/02/140517881.png)

    b) 通过chkconfig sendmail off命令来关闭sendmail的启动 chkconfig sendmail off

    c) 这时再用chkconfig --list sendmail命令可以查看到sendmail的所有启动级别都已经关闭了 ![](http://www.myexception.cn/img/2013/11/02/140517882.png)

正式部署:

  1. 解压Apache James包(apache-james-2.3.2.tar.gz):

       tar zxvf apache-james-2.3.2.tar.gz
    

    解压后,会多了一个目录james-2.3.2

  2. 进入james-2.3.2/bin目录,运行run.sh,生成james的配置文件config.xml

          sh run.sh
    

    run.sh: line 37: /usr/local/james-2.3.2/bin/phoenix.sh: 权限不够

    权限不够(估计是解压后run.sh文件没有赋予执行权限),可以执行以下命令:

    chmod +x run.sh
    

    然后再次运行run.sh命令:

     sh run.sh
    

    Using PHOENIX_HOME: /usr/local/james-2.3.2

    Using PHOENIX_TMPDIR: /usr/local/james-2.3.2/temp

    Using JAVA_HOME: /usr/java/jdk1.5.0

    Running Phoenix:

    Phoenix 4.2

    James Mail Server 2.3.2

    Remote Manager Service started plain:4555

    POP3 Service started plain:110

    SMTP Service started plain:25

    NNTP Service started plain:119

    FetchMail Disabled

    说明James启动成功。

  3. 按Ctrl + C退出James,编辑config.xml文件。

    生成的config.xml放置在../james-2.3.2/apps/james/SAR- INF目录下

    修改的方法有很多种。

主要地方有:

  1. Postmaster@自己邮件服务器的域名.com
         这里的“自己邮件服务器的域名.com”就是别人收信的时候看到的发件人是谁。
    
         同时将/etc/hosts里面添加 127.0.0.1 自己[邮件服务器](http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Emyexception%2Ecn%2Fapache%2F1468802%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3_hc&q=wangyuead_cpr&k=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&k0=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&k1=%D3%CA%BC%FE%B7%FE%CE%F1&k2=%CA%FD%BE%DD%BF%E2&k3=james&k4=java&k5=server&sid=8713e2f6e9ed16e4&ch=0&tu=u1828791&jk=ffb1bdeaa3309920&cf=29&fv=15&stid=9&urlid=0&luki=1&seller_id=1&di=128)的[域名](http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Emyexception%2Ecn%2Fapache%2F1468802%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3_hc&q=wangyuead_cpr&k=%D3%F2%C3%FB&k0=%D3%F2%C3%FB&k1=%D3%CA%BC%FE&k2=phoenix&k3=linux&k4=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&k5=%D3%CA%BC%FE%B7%FE%CE%F1&sid=8713e2f6e9ed16e4&ch=0&tu=u1828791&jk=ffb1bdeaa3309920&cf=29&fv=15&stid=9&urlid=0&luki=7&seller_id=1&di=128).com
    
  2. [xml] view plaincopyprint?在CODE上查看代码片派生到我的代码片

       <servernames autodetect="true" autodetectIP="true">
    

    改为

       <servernames autodetect="false" autodetectIP="false">
    
  3. 并在[server](http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Emyexception%2Ecn%2Fapache%2F1468802%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3_hc&q=wangyuead_cpr&k=server&k0=server&k1=%D3%F2%C3%FB&k2=%D3%CA%BC%FE&k3=phoenix&k4=linux&k5=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&sid=8713e2f6e9ed16e4&ch=0&tu=u1828791&jk=ffb1bdeaa3309920&cf=29&fv=15&stid=9&urlid=0&luki=6&seller_id=1&di=128)names的下级标签修改自己成自己的域名

    [xml] view plaincopyprint?在CODE上查看代码片派生到我的代码片

      <<span style="width: auto; height: auto;" id="19_nwp"><a target=_blank style="text-decoration: none;" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Emyexception%2Ecn%2Fapache%2F1468802%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3\_hc&q=wangyuead\_cpr&k=server&k0=server&k1=%D3%F2%C3%FB&k2=%D3%CA%BC%FE&k3=phoenix&k4=linux&k5=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&sid=8713e2f6e9ed16e4&ch=0&tu=u1828791&jk=ffb1bdeaa3309920&cf=29&fv=15&stid=9&urlid=0&luki=6&seller_id=1&di=128" id="19_nwl"><span style="font-size:14px;color:#0000ff;width:auto;height:auto;float:none;">server</span></a></span>name>自己<span style="width: auto; height: auto;" id="20_nwp"><a target=_blank style="text-decoration: none;" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Emyexception%2Ecn%2Fapache%2F1468802%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3\_hc&q=wangyuead\_cpr&k=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&k0=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&k1=%D3%CA%BC%FE%B7%FE%CE%F1&k2=%CA%FD%BE%DD%BF%E2&k3=james&k4=java&k5=server&sid=8713e2f6e9ed16e4&ch=0&tu=u1828791&jk=ffb1bdeaa3309920&cf=29&fv=15&stid=9&urlid=0&luki=1&seller_id=1&di=128" id="20_nwl"><span style="font-size:14px;color:#0000ff;width:auto;height:auto;float:none;">邮件服务器</span></a></span>的<span style="width: auto; height: auto;" id="21_nwp"><a target=_blank style="text-decoration: none;" target="_blank" href="http://cpro.baidu.com/cpro/ui/uijs.php?rs=1&u=http%3A%2F%2Fwww%2Emyexception%2Ecn%2Fapache%2F1468802%2Ehtml&p=baidu&c=news&n=10&t=tpclicked3\_hc&q=wangyuead\_cpr&k=%D3%F2%C3%FB&k0=%D3%F2%C3%FB&k1=%D3%CA%BC%FE&k2=phoenix&k3=linux&k4=%D3%CA%BC%FE%B7%FE%CE%F1%C6%F7&k5=%D3%CA%BC%FE%B7%FE%CE%F1&sid=8713e2f6e9ed16e4&ch=0&tu=u1828791&jk=ffb1bdeaa3309920&cf=29&fv=15&stid=9&urlid=0&luki=7&seller_id=1&di=128" id="21_nwl"><span style="font-size:14px;color:#0000ff;width:auto;height:auto;float:none;">域名</span></a></span>.com</servername>

4、 修改inbox的存储位置。

将

<inboxRepository>
     <repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
</inboxRepository>

注释掉或修改为下面的,表示利用数据库来存储,而不是文件的形式

[xml] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  <inboxRepository>
      <repository destinationURL="db://maildb/inbox/" type="MAIL"/>
 </inboxRepository>

注:如果修改成了dbfile协议,代表邮件头在数据库,邮件体在文件

5、 注释掉服务网段,如果需要校验,则开启。

[xml] view plaincopyprint?在CODE上查看代码片派生到我的代码片

<!-- <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
            <processor> relay-denied </processor>
            <notice>550 - Requested action not taken: relaying denied</notice>
</mailet> -->

6、 修改outgoing的存储为数据库

       <mailet match="All" class="RemoteDelivery">

           <outgoing> file://var/mail/outgoing/ </outgoing>

改成

           <outgoing> db://maildb/spool/outgoing </outgoing> 

7、 同理,找到spool的配置,将文件的改为数据库存储。

8、修改dnsserver,由于邮件服务器发送邮件的时候肯定是往外网发,所以需要dns来做发送时,投递给对面接受服务器域名时的解析工作。

同时修改james的配置。

同时修改这2个参数为false

9、修改校验

10、修改接受时的网段地址(自己根据需求也可以设置不同的值)

11、 修改添加删除邮件账户时的存储为数据库。注释掉上面的

12、 新建jdbc数据源

13、 复制mysql-connection.jar 到 ../james-2.3.2/lib 下,这样就能加载上了。

14、 重启james服务,基本就OK了。

15、 添加邮件服务器的账号。默认的登陆id 为root 密码也为 root

可以输入help来获取帮助。

附上james的下载(我的云盘):http://pan.baidu.com/s/1h57fQ