原 薦 James郵箱伺服器簡單執行配置
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,它會每隔一段時間就把這個郵件傳送一下。正確的做法是接收完後都刪除,不只是改狀態這麼簡單。因為如果只改了狀態會出現一個問題就是接收郵件時,它從資料庫讀資料,讀出郵件,如果你這時候再讀,它會重複讀取。所以接收完後是肯定要刪除的。