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,它會每隔一段時間就把這個郵件發送一下。正確的做法是接收完後都刪除,不只是改狀態這麼簡單。因爲如果只改了狀態會出現一個問題就是接收郵件時,它從數據庫讀數據,讀出郵件,如果你這時候再讀,它會重複讀取。所以接收完後是肯定要刪除的。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章