James簡單運行配置
James:Java Apache Mail Enterprise Server 是一個企業級的JAVA郵件服務器.開源的.
一.配置;
首先將james-binary-2.3.1.zip解壓縮下載到你的安裝目錄。
我們可以把這個過程理解爲安裝的過程。我在這裏將它解壓到c:\.並且把它改名爲james.這樣我們的james就安裝好了。目錄爲C:\james。在此之前你得安裝JDK,配置JAVA環境變量.
james的應用程序結構
apps,bin,conf,ext,lib,logs,tools
文件夾bin
bin目錄中的run.bat和run.sh是James的啓動程序。只要記住這個重要文件就可以。
啓動之後控制檯顯示如下:
Using PHOENIX_HOME: C:\james //james安裝目錄
Using PHOENIX_TMPDIR: C:\james\temp //james安裝目錄中的temp目錄,用處不詳
Using JAVA_HOME: C:\javaJdk //本機安裝的JDK目錄
James Mail Server 2.3.1 //james版本
Remote Manager Service started plain:4555 //james端口
POP3 Service started plain:110 //pop3 端口,可在config.xml中配置
SMTP Service started plain:25 //smtp 端口,可在config.xml中配置
NNTP Service started plain:119 //nntp 端口,可在config.xml中配置
FetchMail Disabled
文件夾Apps
Apps 目錄下有個james的子目錄這個目錄是它的核心。
- SAR-INF 下有一個config.xml是james中的核心配置文件。
- Logs 包含了與james有關的Log。調試全靠它了。
- Var 包含了一些文件夾通過它們的名字我們大概也能猜測出它們的用途。Mail主要用於存儲郵件。nntp主要用於新聞服務器。Users用於存儲所有郵件服務器的用戶。也就是郵件地址前面的東東。如:[email protected]的pig就是所謂用用戶。
創建用戶
在James上建若干用戶,用來測試收發郵件。當然如果你不用james本身的用戶也可以。James以telnet 的方式提供了接口用來添加用戶。下面我來演示一下。
首先使用telnet來連接james的remote manager
telnet localhost 4555 回車
這裏連接到的是本機:localhost這個也是可以在config.xml裏配置的,當然,如果配置成其他服務器,則需要將端口映射到本機上,這個可以在路由器裏配置:192.168.0.1(具體地址視局域網而定)。
然後輸入管理員用戶名和密碼(user/pwd : root/root 是默認設置這個可以在config.xml中修改)
JAMES Remote Administration Tool 2.3.1
Please enter your login and password
Login id:
root
Password:
root
Welcome root.HELP for a list of commands
添加用戶
adduser test test
User test added
Adduser lyle lyle
User lyle added
查看添加情況
listusers
Existing accouts 2
user:lyle
user:test
更改配置文件:config.xml:
更改端口:
pop3server -- <port>201</port>
smtpserver -- <port>202</port>
nntpserver -- <port>203</port>
更改郵件服務器地址:
servernames -- <servername>whsite.ine.net.cn</servername>或:<servername>127.0.0.1</servername>
administrator_accounts -- <account login="lyle" password="lyle"/>
收郵件:
(因爲是用pop3.whsite.ine.net.cn收郵件,所以收件人,發件人的郵件地址都必須是這個服務器上的,所以我們在whsite.ine.net.cn上重新建一個帳號,然後給自己發郵件以測試);
一,打開james服務;
1)運行安裝目錄下bin/run.bat;
2)打開CMD;
telnet whsite.ine.net.cn 4555 //連接到服務端口;
JAMES Remote Administration Tool 2.3.1
Please enter your login and password
Login id:
sunyu
Password:
sunyu
Welcome root. HELP for a list of commands
adduser sunyu 123456 //添加用戶,用戶名爲sunyu 密碼爲:123456
quit //斷開連接
telnet whsite.ine.net.cn 201 //連接到POP3端口;
user sunyu 回車;
pass 123456 回車;
list //查看郵件列表;
retr 1 //查看第一封郵件;
其他命令還有:
1,stat 查詢郵箱中的所有郵件的統計信息,一般只有郵件總數和所有郵件佔用的字節大小
2,uidl 根據郵件的序號查詢該郵件的唯一標誌符
3,list 查詢郵箱中的所有郵件信息,以列表形式列出,自動生成郵件序號。如果指定某一序號則只顯示指定郵件信息
4,retr 指定郵件序號查看某郵件內容
5,dele 指定郵件序號將某封郵件設置刪除標記,當執行退出命令 quit時將實際刪除所有具有刪除標記的郵件
6,rset 清除所有設置了刪除標記的郵件的刪除標記
7,top 獲取某郵件的郵件頭和郵件體中的前n行內容,指定郵件序號和n,以空格符隔開
發郵件:
1)連接端口;
telnet whsite.ine.net.cn 202
2)確認身份
ehlo lyle
3)輸入發件人;
mail from:<[email protected]>
4)輸入收件人:
rcpt to:<[email protected]>
5)輸入內容:
data hello word! 回車 . 回車
這時候再進入pop3端口即可查看郵件;
默認情況下,發完出的郵件,用戶信息,接收的郵件是保存在本地目錄中的,默認目錄是:
C:\james\apps\james\var\users:用戶
C:\james\apps\james\var\mail:郵件,裏面有inboxes(收件箱)outgoing(發件箱)以及一些錯誤信息;
當然,我們可以選擇將郵件和用戶信息保存在數據庫中.也就是說要將James和數據庫連接起來;這個連接是在config.xml裏配置的;在config.xml裏找到:<users-store></users-store>項,它是用來保存用戶信息的;默認時它裏面的是:
<repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
<destination URL="file://var/users/"/>
</repository>
意思就是說用戶信息存在文件系統中的目錄:users裏面;
我們可以對這個設置進行更改;但James提供了現成的配置,只不過被註釋掉了.我們打開註釋或手寫:
<repository name="LocalUsers" class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users">
<sqlFile>file://conf/sqlResources.xml</sqlFile>
</repository>
意思就是將用戶信息保存在數據庫的users表裏.具體的SQL是在本地文件系統中的sqlResources.xml中配置的;
然後就是郵件信息的保存:
找到<inboxrepository>項, 默認是<repository destinationurl="file://var/mail/inboxes/" type="mail">
屏蔽掉,在它下面有個例子<repository destinationurl="db://maildb/inbox/" type="mail">,激活它.
然後是spool,找到<spoolrepository>將默認屏蔽掉.
激活<repository destinationurl="db://maildb/spool/spool" type="spool"/>
這時候數據庫中會自動建兩個表:spool和inbox;spool是臨時表,只要通過郵件服務器的郵件,不管是發,收,都會存到這個表裏。存入的時候郵件有個狀態:message_state,狀態的值有幾種,transe..span,root等第一個表示正在傳,當傳完後郵件服務器會自動刪除這條郵件(此功能可配置,後面有介紹,通過改刪除郵件的SQL可屏蔽此功能);當接收一個郵件時,也是先放在spool表裏。然後往inbox表裏轉存;
所以,這時候我們又要對數據庫進行配置,讓James知道是哪個數據庫,在什麼地址;
在config.xml裏找到<database-connections />項.它就是數據庫連接的配置;在根據要連接的數據庫的不同,配置的寫法也不同,文件裏有一些數據庫寫法的提示,如oracle,mysql,mssql:但要注意的是,實際上的最終正確的寫法是根據數據驅動的不同而不同的.如:
<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>oracle.jdbc.OracleDriver</driver>
<dburl>jdbc:oracle:thin:@192.168.0.55:1521:oracle</dburl>
<user>RDNEW</user>
<password>123456</password>
<max>20</max>
</data-source>
</database-connections>
上面這個是oracle的.
在連接mssql裏,文件裏提示的寫法是:
<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>com.inet.tds.TdsDriver</driver>
<dburl>jdbc:inetdae7:127.0.0.1?database=James</dburl>
<user>sa_james</user>
<password>blahblah</password>
<max>20</max>
</data-source>
但實際上我在配置時的寫法是:
<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
<driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
<dburl>jdbc:sqlserver://192.168.0.120:1433;databaseName=oadb</dburl>
<user>sa</user>
<password>root</password>
<max>20</max>
</data-source>
差別主要體現在dburl這一項;
配置完成後將對應的數據驅動的jar放在James安裝根目錄下的lib目錄下即可;這時,運行run.bat.就可.如果在配置的數據庫中沒有users這個表,它會自動創建這個表;
注意:當更改默認端口後,外網發過來的郵件接收不到.所以還是用默認的:110 25 爲好,同時要在路由器上將這兩個端口映射到本機上.成功後的配置文件在網易網盤中.而且這個配置裏面郵件和用戶新建後是存在數據庫中的,因爲項目用的是oracle數據庫,所以要將oracle數據驅動的jar文件複製到lib文件夾下.運行服務後會自動在數據庫裏建表:users(用戶),spool(郵件),在郵件表裏默認是select一次後就自動刪除,即:收到郵件並查看後就自動刪除.要更的話可以更改:conf/sqlResources.xml裏的SQL語句.我是這樣改的:
<sql name="removeMessageSQL">DELETE FROM ${table} WHERE message_name = ? AND repository_name = ?</sql>
將上面的這條語句裏的問號:?改成123;當然,我這樣改了後還有一個例外情況:當上面兩個字段都爲123時它還是會被刪除,不過這種情況在我當時的項目中貌似不會發生。。。
另外要注意的是:spool表裏的數據是郵件服務器的表。我們一般會在項目中有自己的郵件表,我們收郵件的時候從spool表裏讀取數據後應該刪除spool裏的內容;
如果不刪,起碼也應該將spool表裏數據中message_state這個字段的值改成:
spam默認情況下它的值是:trans..什麼的。如果不改成spam,它會每隔一段時間就把這個郵件發送一下。正確的做法是接收完後都刪除,不只是改狀態這麼簡單。因爲如果只改了狀態會出現一個問題就是接收郵件時,它從數據庫讀數據,讀出郵件,如果你這時候再讀,它會重複讀取。所以接收完後是肯定要刪除的。