James郵箱服務器簡單運行配置

James簡單運行配置java

James:Java Apache Mail Enterprise Server 是一個企業級的JAVA郵件服務器.開源的.
一.配置;
首先將james-binary-2.3.1.zip解壓縮下載到你的安裝目錄。
咱們能夠把這個過程理解爲安裝的過程。我在這裏將它解壓到c:\.而且把它更名爲james.這樣咱們的james就安裝好了。目錄爲C:\james。在此以前你得安裝JDK,配置JAVA環境變量.mysql

james的應用程序結構 

apps,bin,conf,ext,lib,logs,tools

 文件夾bin

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

 Apps 目錄下有個james的子目錄這個目錄是它的核心。
 數據庫

  

  •  SAR-INF 下有一個config.xml是james中的核心配置文件。
  • Logs 包含了與james有關的Log。調試全靠它了。
  • Var 包含了一些文件夾經過它們的名字咱們大概也能猜想出它們的用途。Mail主要用於存儲郵件。nntp主要用於新聞服務器。Users用於存儲全部郵件服務器的用戶。也就是郵件地址前面的東東。如:pig@sina.com的pig就是所謂用用戶。

建立用戶

在James上建若干用戶,用來測試收發郵件。固然若是你不用james自己的用戶也能夠。James以telnet 的方式提供了接口用來添加用戶。下面我來演示一下。

首先使用telnet來鏈接james的remote manager

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

相關文章
相關標籤/搜索