由于項目需要部署在Linux上,而又使用到Apache James作郵件服務器,因此總結(jié)了一下在Linux上部署Apache James的步驟,寫得比較凌亂。
在Linux上部署Apache James
前提工作:
1)由于Apache James郵件服務需要用到1024以下的端口,因此請用root用戶登錄進行部署。
2)需要先安裝JDK1.5或以上版本,部署前請確保您的JDK環(huán)境變量如JAVA_HOME等已經(jīng)設置好。
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的系統(tǒng)安裝時都會默認安裝了sendmail郵件服務,因此在部署Apache James時,需要把sendmail關閉。可以通過以下方法來關閉sendmail,以防止系統(tǒng)重啟時又自動啟動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的所有啟動級別都已經(jīng)關閉了:
[root@susun177 ~]# chkconfig --list sendmail
sendmail 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
這樣,即使重新啟動Linux系統(tǒng),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文件沒有賦予執(zhí)行權限),可以執(zhí)行以下命令:
[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的修改,網(wǎng)上很多資料,請自行查閱。在這里,只寫關鍵的修改:
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數(shù)據(jù)庫連接字符串:
<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數(shù)據(jù)庫,如果是其他數(shù)據(jù)庫,則需要修改為對應的數(shù)據(jù)庫連接驅(qū)動,以及數(shù)據(jù)庫用戶信息。
注意:一定要記得配置<keep-alive>,該參數(shù)的意思是,在使用連接池的連接之前,是否需要驗證該連接是否有效。之前,我沒有設置該參數(shù),結(jié)果總是出現(xiàn)收不到郵件的問題。
4)優(yōu)化一下James內(nèi)存,在../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配置,設置初始內(nèi)存128M,最大內(nèi)存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) 復制數(shù)據(jù)庫驅(qū)動到../james-2.3.2/lib目錄下,我用的是oracle數(shù)據(jù)庫,驅(qū)動包為:ojdbc14.jar
6)重啟Apache James服務。
7)最后,進入郵件系統(tǒng)全局管理,將系統(tǒng)的域名改為上述的server name。
8)如無意外一切OK。