由于项目需要部署在Linux上,而又使用到Apache James作邮件服务器,因此总结了一下在Linux上部署Apache James的步骤,写得比较凌乱。
在Linux上部署Apache James
前提工作:
1)由于Apache James邮件服务需要用到1024以下的端口,因此请用root用户登录进行部署。
2)需要先安装JDK1.5或以上版本,部署前请确保您的JDK环境变量如JAVA_HOME等已经设置好。
3)James 启动时,其SMTP 服务默认在 25 端口启动,POP3 服务默认在 110 端口启动, NNTP 服务默认在 119 端口启动, 请确保这些端口未被占用。Linux下查过这些端口是否被占用的命令是:lsof -i:端口号,例如:
[root@nhslj-app ~]# lsof -i:25
COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
sendmail 3268 root    4u  IPv4   8650       TCP nhslj-app:smtp (LISTEN)
这表示25端口正在被sendmail服务占用。
关闭SendMail服务:
一般RedHat的系统安装时都会默认安装了sendmail邮件服务,因此在部署Apache James时,需要把sendmail关闭。可以通过以下方法来关闭sendmail,以防止系统重启时又自动启动sendmail服务。
1)用chkconfig --list sendmail命令查看sendmail的情况:
[root@susun177 ~]# chkconfig --list sendmail
sendmail        0:关闭  1:关闭  2:启用  3:关闭  4:启用  5:启用  6:关闭
2)通过chkconfig sendmail off命令来关闭sendmail的启动:
[root@susun177 ~]# chkconfig sendmail off
3)这时再用chkconfig --list sendmail命令可以查看到sendmail的所有启动级别都已经关闭了:
[root@susun177 ~]# chkconfig --list sendmail
sendmail        0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭
这样,即使重新启动Linux系统,sendmail服务也不会自动启动了。
前期工作做完了,接下来就是部署Apache  James了。
1)解压Apache James包(apache-james-2.3.2.tar.gz):
[root@susun177 local]# tar zxvf apache-james-2.3.2.tar.gz
解压后,会多了一个目录james-2.3.2
2)进入james-2.3.2/bin目录,运行run.sh,生成james的配置文件config.xml:
[root@susun177 bin]# sh run.sh 
run.sh: line 37: /usr/local/james-2.3.2/bin/phoenix.sh: 权限不够
权限不够(估计是解压后run.sh文件没有赋予执行权限),可以执行以下命令:
[root@susun177 bin]# chmod +x run.sh phoenix.sh
然后再次运行run.sh命令:
[root@susun177 bin]# 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目录下。关于James的config.xml的修改,网上很多资料,请自行查阅。在这里,只写关键的修改:
A)找到<servernames autodetect="true" autodetectIP="true"> 设成         
         autodetect="false" autodetectIP="false" 
         autodetct设为true会自动侦测你的主机名,设成false会用你指定的server name。
         autodetectIP设为true会为你的servername加上ip。
B)设置servername 将默认的为localhost改成你的server名字 如king.cn: 
<servername>king.cn</servername>
然后修改Linux的hosts主机设置文件:
[root@susun177 SAR-INF]# vi /etc/hosts
在打开的文件添加一行,然后保存:
192.168.1.177           king.cn   king
注意:第一个为IP地址  第二个为主机域名  第三个为主机名称
提示:名字后面应该要加上.com或者.cn这样163等邮件服务器才不会拒绝的。
C)注释掉
         <mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor> 
             <processor> relay-denied </processor> 
             <notice>550 - Requested action not taken: relaying denied</notice> 
         </mailet>
D)配置DNS Server,先通过netstat命令查看dns配置
[root@susun177 SAR-INF]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
找到<dnsserver>,在<servers>里最前面添加一行: <server>192.168.1.0</server> ,                同时设置autodiscover为false。
   <dnsserver>
      <servers>
         <!--Enter ip address of your DNS server, one IP address per server -->
         <!-- element. -->
         <!--
          <server>127.0.0.1</server>
         -->
           <server>10.168.0.10</server>          
      </servers>
      <!-- Change autodiscover to false if you would like to turn off autodiscovery -->
      <!-- and set the DNS servers manually in the <servers> section -->
      <autodiscover>false</autodiscover>
      <authoritative>false</authoritative>
      <!-- Maximum number of entries to maintain in the DNS cache -->
      <maxcachesize>50000</maxcachesize>
   </dnsserver>
E)修改James数据库连接字符串:
      <data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
         <driver>oracle.jdbc.driver.OracleDriver</driver>
         <dburl>jdbc:oracle:thin:@192.168.1.17:1521:hello</dburl>
         <user>hello</user>
         <password>kitty</password>
         <keep-alive>select 1 from dual</keep-alive>
         <testOnBorrow>true</testOnBorrow>
         <testOnReturn>true</testOnReturn>
         <max>50</max>
      </data-source>
以上用的是oracle数据库,如果是其他数据库,则需要修改为对应的数据库连接驱动,以及数据库用户信息。
注意:一定要记得配置<keep-alive>,该参数的意思是,在使用连接池的连接之前,是否需要验证该连接是否有效。之前,我没有设置该参数,结果总是出现收不到邮件的问题。
4)优化一下James内存,在../james-2.3.2/bi/phoenix.sh加入:
# Set Heap Size 2007-0818,fix OutOfMemory bug while transporting big mail
PHOENIX_JVM_OPTS="$PHOENIX_JVM_OPTS -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M"
修改../james-2.3.2/conf/wrapper.conf的jvm配置,设置初始内存128M,最大内存512M 
                   # Initial Java Heap Size (in MB) 
                   #wrapper.java.initmemory=16 
                   wrapper.java.initmemory=128 
         
                   # Maximum Java Heap Size (in MB) 
                   #wrapper.java.maxmemory=64 
                   wrapper.java.maxmemory=512
5) 复制数据库驱动到../james-2.3.2/lib目录下,我用的是oracle数据库,驱动包为:ojdbc14.jar
6)重启Apache James服务。
7)最后,进入邮件系统全局管理,将系统的域名改为上述的server name。
8)如无意外一切OK。