James簡單運行配置java
James:Java Apache Mail Enterprise Server 是一個企業級的JAVA郵件服務器.開源的.
一.配置;
首先將james-binary-2.3.1.zip解壓縮下載到你的安裝目錄。
咱們能夠把這個過程理解爲安裝的過程。我在這裏將它解壓到c:\.而且把它更名爲james.這樣咱們的james就安裝好了。目錄爲C:\james。在此以前你得安裝JDK,配置JAVA環境變量.mysql
bin目錄中的run.bat和run.sh是James的啓動程序。只要記住這個重要文件就能夠。
啓動以後控制檯顯示以下:sql
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 目錄下有個james的子目錄這個目錄是它的核心。
數據庫
telnet localhost 4555 回車apache
這裏鏈接到的是本機:localhost這個也是能夠在config.xml裏配置的,固然,若是配置成其餘服務器,則須要將端口映射到本機上,這個能夠在路由器裏配置:192.168.0.1(具體地址視局域網而定)。服務器
而後輸入管理員用戶名和密碼(user/pwd : root/root 是默認設置這個能夠在config.xml中修改)
oracle
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
添加用戶
app
adduser test test User test added Adduser lyle lyle User lyle added
listusers Existing accouts 2 user:lyle user:test
本身項目中的一些配置: sqlserver
更改配置文件: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:<lyle@whsite.ine.net.cn>
4)輸入收件人:
rcpt to:<lyle@whsite.ine.net.cn>
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,它會每隔一段時間就把這個郵件發送一下。正確的作法是接收完後都刪除,不僅是改狀態這麼簡單。由於若是隻改了狀態會出現一個問題就是接收郵件時,它從數據庫讀數據,讀出郵件,若是你這時候再讀,它會重複讀取。因此接收完後是確定要刪除的。