| 導購 | 订阅 | 在线投稿
分享
 
 
 

開放原代碼的 Qmail+Mysql+Jsp 中文電子郵局系統說明

來源:互聯網網民  2008-05-31 00:04:11  評論

前面介紹了兩個國外的程序, 現在介紹一個我正在改進的系統給大家.

系統也是建立在 qmail + mysql 基礎上的, WEB 部分用 JSP 和 JAVA 完

成, 包括有 WEB 管理功能. 我感覺這個系統很適合中小企業的網站使用, 一

般萬人以內肯定都沒什麽問題, 我花了時間修複了很多系統中存在的 BUG,

目的是想發布一個可以投入正式使用的版本給大家, 當然界面美工不是我的拿

手本事, 這個只有大家自己去做了, 但是基本功能我盡量做到沒有問題.

先提供文檔給大家參考, 我個人網站已經在使用了大家可以去看一下地址是:

http://www.fastirc.com/mail/

user: test

pass: test

################################################################

下面是一點關于 JeticMail 的說明

首先感謝 D. J. Bernstein 完成的 qmail-1.03 和 checkpassword-0.9

JeticMail 最先由風雲和青山兩位華源前輩完成, 架構在 www.gbsource.com

上穩定運行了八個月. 隨後由 Capitain (mail:hyzd5@263.net 負責 Java 程序)

和 dennis (mail: zuestc@263.net 系統配置) 加以改進, 增加了 POP3 收

信功能, 並做了部分優化.

JeticMail 底層使用 qmail-1.03 來做郵件服務器, 風雲在其基礎上做了部

分改動, 加 入了對 mysql 的支持. 同時在 checkpassword-0.9 也加入了

mysql 支持. 前端使用 jsp 來完成 webmail. 這個系統沿襲了 qmail 獨特

的油箱格式 Maildir, 爲了更好的服務于 webmail 在 /mail/path/Maildir

下采用了五個子目錄, 分別是 dsb, rev, snt, src, tmp, 分別是垃圾箱,

收信箱, 發件箱, 草稿箱, 臨時.

爲了給 GNU 事業做一份貢獻, 爲了大家更好的學習和參考, 他們 opensource

了這個郵件系統, 並且取名爲 JeticMail.

################################################################

我對 JeticMail 的改進說明

由于華源網絡的倒閉這個項目沒有能夠繼續發展下去, 我對此感到非常的可惜,

畢竟國內這樣實用的好程序真的太少了. 但是自從華源網絡公布這個郵件系統

以後, 到目前爲止真正安裝配置成功的用戶實在太少了, 我覺得這是由多方面

的因素造成的, 首先也是最關鍵的一點就是這個系統自帶的說明文檔太少和太

簡陋了, 其實這也是許多 GPL 項目的一個特點. 其次是原代碼和自帶的某些配

置文件還有腳本中存在許多的小錯誤, 造成了很多用戶遇到無法編譯或者無法

連接數據庫或者無法調用 JAVA servlet 的問題. 再次是許多安裝使用此系統

的朋友是一些 UNIX 新手對 UNIX 和 qmail 以及 mysql jdk 並不是很了解,

于是安裝過程中會走許多的彎路以至最後無法正常使用這個系統.

因爲希望這樣的好程序可以有更多的朋友一起使用和改進, 並充分發揚 GPL 精

神我編寫了這份安裝說明文檔, 並修正了到目前爲止我所發現的所有程序和腳本

以及配置文件中的錯誤, 我將這個程序重新打包提供給需要的朋友使用, 希望

對大家的學習和生活有所幫助.

到目前爲止我除了編寫這個說明外所做的工作如下:

1, 對 qmail-1.03-jeticmail 的核心程序做了調整, 增加了 smtp 發信認證功

能, 同時打了兩個官方網站推薦的補丁.

qmail-smtpd.c 來源 http://www.cuni.cz/~vhor/qmail/smtpauth-en.html

這個補丁要比很多文章中說的 http://www.nimh.org/ 上的好許多, 並且增

加了 auth login 的系統日志, 這樣你可以查到那些用戶通過 smtp auth 後

對外發信. 我在它的基礎上做了對 mysql 的支持.

官方網站推薦補丁來源 http://www.qmail.org/top.html#patches

現在關于 qmail 的補丁很多, 但是我建議大家不是官方推薦使用的補丁最好

不要使用, 否則難以確保安全和穩定性能.

2, 修正了 qmail-1.03-jeticmail 和 checkpassword-0.9-jeticmail 在某些環

境下無法編譯通過的問題.

3, 升級原來的 ucspi-tcp-0.84.tar.gz 到最新的 ucspi-tcp-0.88.tar.gz .

4, 修正作者提供的 resin.conf 配置文件中的一個錯誤.

5, 修正 getAttachment.java 中存在的錯誤.

6, 修正了當來信的原始信息中時間爲空值時無法通過 WEBMAIL 收取郵件的問題.

7, 修正了在 WEBMAIL 中發送電子郵件時無法通過地址本導入郵件地址的問題.

8, 對一些 JSP 文件中頁面部分的小錯誤做了一些修改和調整.

做了以上修改後系統基本可以運行投入正式使用了, 當然還是存在許多小錯誤的

我會在以後繼續改進, 另外在爭得作者同意後我會考慮和大家一起繼續發展這個

項目, 推出新的版本增加更多的功能.

################################################################

JeticMail 安裝說明

doc 目錄下是一些說明, 主要是作者自己編寫的程序的使用說明.

jsp 目錄下存放的是 WEBMAIL 和 servlet .

lib 目錄下是使用 WEBMAIL 所需要的 JAVA CLASS 包.

soft 目錄下的東西大家一定知道是什麽我就不再介紹了.

old 目錄下是當初作者自己發布的那個安裝包.

我在 RedHat 6.2 和 7.3 下安裝了 JeticMail 都可以正常使用. 其他系統

我沒有做嚴格測試, 這個工作將在以後繼續進行.

將 jsp 和 soft 目錄下的所有東西傳到服務器上, 並且上傳 mysql 和 jdk

的安裝包到你的服務器上. mysql 建議使用 3.22.X 或者 3.23.X 因爲其它

版本我還沒有測試, jdk 我測試的是 1.2.2 和 1.3.1 版本, 最新的 1.4.X

我沒有測試過. resin 我使用的是 1.2.10 原作者使用過 1.2.3 和 1.2.5

更高的版本我沒有用過. 我有朋友在 TOMCAT 下也運行成功了這個系統, 不

過需要調整的配置可能比較多, 有時間我會寫出 TOMCAT 下的配置說明.

注意: 上傳文本文件要用 ASCII 方式, 上傳二進制文件要用 BIN 方式.

下面是安裝示例, 您可以根據實際情況有所變動.

注意: 我是按照下面方法配置的, 如果你有所改動的話需要在相應的配置文件

和程序以及數據庫結構中做一些調整才能正常運行.

在安裝前大家必須首先關閉目前正在使用的郵件系統, 包括 SMTP 以及

POP3 服務, 如果你本來裝的是 qmail 建議將本來的系統刪除, 並且需

要刪除本來安裝 qmail 時增加的所有用戶和組.

################################################################

/htdocs/jeticmail 爲你的 jsp 站點根目錄.

/home/mail 爲你的郵件系統用戶目錄的根目錄.

/home/mail/attachment 爲臨時保存上傳附件的目錄.

/usr/local/mysql 爲 mysql 目錄.

/usr/local/resin 爲 resin 目錄.

/usr/local/jdk 爲 jdk 目錄.

/var/qmail 爲 qmail 目錄.

################################################################

0. # mkdir /htdocs

# mkdir /home/mail

# mkdir /home/mail/attachment

# chmod -R 777 /home/mail

# cp mysql-3.22.X.tar.gz /usr/local/src/

# cp jdk-1_2_2_X-linux-i386.tar.gz /usr/local/src/

# cp qmail-1.03-jeticmail.tar.gz /usr/local/src/

# cp checkpassword-0.9-jeticmail.tar.gz /usr/local/src/

# cp ucspi-tcp-0.88.tar.gz /usr/local/src/

# cp resin-1.2.10.tar.gz /usr/local/src/

# cp -Rf jsp /usr/local/src/

# cd /usr/local/src/

# tar -xzvf mysql-3.22.X.tar.gz

# tar -xzvf jdk-1_2_2_X-linux-i386.tar.gz

# tar -xzvf resin-1.2.10.tar.gz

1. 安裝 mysql 數據庫軟件.

# cd /usr/local/src/mysql-3.22.X

# ./configure --prefix=/usr/local/mysql

# make

# make install

# cd /usr/local/mysql/bin

# ./mysql_db_install

# cp ../share/mysql/mysql.server ./

# chmod 711 mysql.server

# ./mysql.server start (啓動 mysql 數據庫)

# cd /etc/rc.d

# vi rc.local

在最後一行添加: /usr/local/mysql/bin/mysql.server start (系統啓動時自動啓動 mysql 數據庫)

# cd init.d

# vi killall

在最後一行添加: /usr/local/mysql/bin/mysql.server stop (系統關閉時自動關閉 mysql 數據庫)

# vi /etc/profile

增加路徑, 在 PATH 行尾加上: /usr/local/mysql/bin:/usr/local/bin 以 ":" 間隔.

# ./mysqladmin -u root password ....

設置你的 mysql 管理員密鑰.

# mysql -u root -p -h localhost

系統會提示輸入密碼輸入你剛設置好的密碼就可以進入 mysql 字符管理截面.

# mysql grant all privileges on *.* to root@127.0.0.1 identified by 'your_password';

這一步操作一定不能少, 目的是在 mysql 中建立一個 root@127.0.0.1 的用戶, 這個用戶擁有對

所有數據庫的操作權限, 但是不具備開設其他用戶的權限. 因爲 JDBC 驅動只接受 uid@127.0.0.1

這樣的方式連接數據庫而不接受 uid@localhost 所以你必須增加這樣的一個數據庫用戶.

以上操作完成後在 mysql 中建立 jeticmail 數據庫, 並將 jeticmail.sql 的內容導入到該數據庫中.

注意: mysql 3.23.X 需要使用 mysql 用戶來安裝, 如果你使用這個版本的 mysql 請先在你的系統中

添加 mysql 用戶, 並將 mysql 安裝到的目錄的所有權給 mysql 用戶, 我這裏就不具體介紹了.

2. 安裝 jdk 環境.

# cd /usr/local/src

# mv jdk1.2.2 /usr/local/jdk

# ln -s /usr/local/jdk/jre /usr/local/jre

# vi /etc/profile (設置你的環境變量)

在 PATH 行尾加上: /usr/local/jdk/bin

加入以下幾行:

CLASSPATH=/usr/local/jdk/lib/tools.jar:/usr/local/jdk/lib:/usr/local/jdk/jre/lib:./:/usr/local/jdk/lib/tomcatjsp.jar:/usr/local/jdk/lib/mm.mysql-2.0.7-bin.jar:/usr/local/jdk/lib/jsdk23.jar

export CLASSPATH

JAVA_HOME=/usr/local/jdk

export JAVA_HOME

保存該文件後推出系統從新登陸以獲得新的環境變量並將本軟件包中 lib 目錄下的所有文件複制到

/usr/local/jdk/lib 目錄下, 然後你需要 login out 一下重新登陸系統, 這樣你設置的全局環境

變量才能起效.

注意: Redhat 7.x 開始以及其他一些 *nix 系統采用了 glibc 2.2.x 的庫環境, 在使用這個版本的

庫環境下 jdk1.2.2 無法正常使用, 你必須安裝 jdk1.3.1 或更高版本.

3. 安裝 qmail 郵件傳輸代理程序.

# cd /usr/local/src/

# tar -xzvf qmail-1.03-jeticmail.tar.gz

# cd qmail-1.03

# vi Makefile

編輯 Makefile 文件修改其中的一行:

在 mysql 3.23.X 系統中:

MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm -lz

在 mysql 3.22.X 系統中:

MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm

注意: Makefile 文件中的 MYSQL_LIBS 和 MYSQL_INCLUDE 路徑可能由于安裝 mysql 的方式不同會不一樣

你需要根據自己的實際情況做調整.

# ./install.sh yourdomainname

# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak

# mv /usr/lib/sendmail /usr/lib/sendmail.bak

# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

# cp /var/qmail/boot/proc /var/qmail/rc

# vi /var/qmail/rc

將其內容改爲:

#!/bin/sh

exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail

# cd /usr/local/src/

# tar -xzvf ucspi-tcp-0.88.tar.gz

# cd ucspi-tcp-0.88

# make

# make setup check

# cd ..

# vi tcp.smtp

內容如下:

127.0.0.1:allow,RELAYCLIENT=""

:allow

# cp tcp.smtp /etc

# cd /etc

# /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp

# cd /usr/local/src/

# tar -xzvf checkpassword-0.9-jeticmail.tar.gz

# cd checkpassword-0.9

# vi Makefile

編輯 Makefile 文件修改其中的一行:

在 mysql 3.23.X 系統中:

MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm -lz

在 mysql 3.22.X 系統中:

MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm

注意: Makefile 文件中的 MYSQL_LIBS 和 MYSQL_INCLUDE 路徑可能由于安裝 mysql 的方式不同會不一樣

你需要根據自己的實際情況做調整.

# make

# make setup check

# chmod 4755 /var/qmail/bin/checkpassword

在 /var/qmail/control 裏寫一個文件 sqlserver 文件內容爲:

server localhost

port 3306

login root

password yourpassword

db jeticmail

注釋:

server Mysql 服務器的名字

port Mysql 端口

login 登陸 Mysql 的用戶名

password 登陸 Mysql 的密碼

db 數據庫的名字

如果郵件到: user1@domain1, qmail-mysql 將在 mbox_host 和 id 字段.

# vi /bin/smtp

SMTP 啓動腳本內容如下:

#!/bin/sh

/usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 200 -x /etc/tcp.smtp.cdb -u 444 -g 444 0 smtp /var/qmail/bin/qmail-smtpd /var/qmail/bin/checkpassword /bin/true 2%26amp;1 | /var/qmail/bin/splogger smtpd 3 %26amp;

# vi /bin/pop3

POP3 啓動腳本內容如下:

#!/bin/sh

/usr/local/bin/tcpserver -c 200 -v 0 pop3 /var/qmail/bin/qmail-popup yourdomainname /var/qmail/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir %26amp;

POP3 啓動腳本你需要查看一下你的 /etc/services 文件, 如果其中指定的是 pop-3 那麽腳本裏

也要修改成 pop-3 . 另外以上兩個腳本除了 #!/bin/sh 其它部分都要寫在一行裏.

# csh -cf '/var/qmail/rc %26amp;' (啓動 qmail 後台程序)

# /bin/smtp (啓動 smtp)

# /bin/pop3 (啓動 pop3)

4. 安裝 resin-1.2.10 (jsp 服務器).

# mv /usr/local/src/resin-1.2.10 /usr/local/resin

# export RESIN_HOME=/usr/local/resin/

# cp /usr/local/src/resin.conf /usr/local/resin/conf/ (或者$RESIN_HOME/conf/)

注意: 請使用我配置好的 resin 的配置文件 resin.conf 如果你要自己優化配置, 請注意要取消

這個項, 否則不能上傳附件.

5. 安裝 jeticmail (安裝前端 jsp 界面).

# cp /usr/local/src/jsp /htdocs/jeticmail

這個命令的意思是把本軟件包裏的 jsp 目錄下面的所有文件和子目錄全部複制到 /htdocs/jeticmail 下.

注意: jsp 連接 mysql 的驅動已經打包在了 lib 目錄的 mm.mysql-2.0.7-bin.jar 中所以不需要另外安裝了.

我對代碼分析和實際檢驗後發現目前的 WEBMAIL 可以使用的最高版本 mysql jdbc 驅動就是這個, 如果

你需要升級 mysql jdbc 驅動那你可能需要對 WEBMAIL 部分的代碼自己做一些修改和調整才能運行.

6. 配置 jeticmail.

修改: /htdocs/jeticmail/WEB-INF/jeticmail.properties

配置好你的連接數據庫用戶密碼等......

# /usr/local/resin/bin/httpd.sh start (啓動 resin 服務器)

7. 訪問 jeticmail.

啓動 resin 後就可以通過 http://yourdomainname:8080 訪問 jeticmail 了.

系統管理員界面地址是 http://yourdomainname:8080/admin/

初始系統管理員帳號: admin

初始系統管理員密碼: 123456

你可以在 mysql 的 jeticmail 數據庫中的 admin 表中修改這個密碼, 對應字段是 password

但是你必須使用 mysql 自帶的 password 函數生成這個密碼, 一個簡單的處理辦法是你可以

先在 WEBMAIL 中注冊一個用戶輸入, 當這個用戶密碼生效後, 你可以查看數據庫將産生的密碼

複制到 admin 表相應的地方.

8. 測試.

本地Mail測試:

% echo to: me | /var/qmail/bin/qmail-inject

注意: 要用你的用戶名代替 me

Mail 應該立即出現在你的信箱之中 ./var/log/maillog 中應該有如下記錄:

qmail: new msg 53

qmail: info msg 53: bytes 246 from qp 20345 uid

666

qmail: starting delivery 1: msg 53 to local me@domain

qmail: status: local 1/10 remote 0/20

qmail: delivery 1: success: did_1+0+0/

qmail: status: local 0/10 remote 0/20

qmail: end msg 53

給一個不存在的本地用戶發信:

%echo to: nonexistent | /var/qmail/bin/qmail-inject

qmail: new msg 53

qmail: info msg 53: bytes 246 from qp 20351 uid

666

qmail: starting delivery 2: msg 53 to local

nonexistent@domain

qmail: status: local 1/10 remote 0/20

qmail: delivery 2: failure: No_such_address.__#5.1.1_/

qmail: status: local 0/10 remote 0/20

qmail: bounce msg 53 qp 20357

qmail: end msg 53

qmail: new msg 54

qmail: info msg 54: bytes 743 from qp 20357 uid 666

qmail: starting delivery 3: msg 54 to local me@domain

qmail: status: local 1/10 remote 0/20

qmail: delivery 3: success: did_1+0+0/

qmail: status: local 0/10 remote 0/20

qmail: end msg 54

遠程投遞測試:

向你在其他機器上的賬戶發信:

% echo to: me@wherever | /var/qmail/bin/qmail-inject

qmail: new msg 53

qmail: info msg 53: bytes 246 from qp 20372 uid

666

qmail: starting delivery 4: msg 53 to remote me@wherever

qmail: status: local 0/10 remote 1/20

qmail: delivery 4: success: 1.2.3.4_accepted_message./...

qmail: status: local 0/10 remote 0/20

qmail: end msg 53

投遞過程將在 starting delivery 和 success 中有個間斷, SMTP 傳送是相對較慢的.

然後去檢查一下 me@wherever 是否正確收到 email.

後面還有三個測試, 分別測試本地 postmaster, 兩次彈回 mail 和通過 mail 執行.

命令. 具體方法可以在 TEST.deliver 中找到.

SMTP Server測試, me 是你的用戶, domain 是你的機器名.

% telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

220 domain ESMTP

helo dude

250 domain

mail

250 ok

rcpt

250 ok

data

354 go ahead

Subject: testing

This is a test.

.

250 ok 812345679 qp 12345

quit

測試一下 mysql 的版本:

shell # ./qmail-getpw user1 somewhere.com

user1123456778/somewhere/username

反回了用戶的 id, uid, gid, home 字段的內容

如果不能找到改用戶, 則返回 'qmail alias'

例如:

shell # ./qmail-getpw u1 a

alias7065534/var/qmail/alias-u1

如果你啓動 mysqld 時加了 --log 選項, 可以看 mysql 的 log 文件

9. jeticmail 調試.

因爲我們的 jeticmail 系統是基于 qmail-1.03 的, 所以請參考 qmail 的 man, 會受益非淺.

java 和 jsp 方面的問題請參考 resin 的日志, 或者在前台運行 resin 或者 tomcat, 查看

java 的抛出異常. 因爲增加了 smtp 發信認證你需要在你的郵件客戶端軟件中做相應的設置才

可以使用 smtp 對外發信, 當然通過浏覽器進入郵件系統, 在任何地方都可正常收發電子郵件.

################################################################

以上就是我的安裝過程, 我正在自己個人網站 http://www.fastirc.com/mail/

使用這個系統有問題的朋友可以發我 EMAIL: webmaster@fastirc.com

另外需要一起交流討論郵件系統的朋友可以加我的 QQ: 8273949

################################################################

目前還有兩個 WEBMAIL 部分的 BUG 我在修複, 大家也可以看看我以上的說明

那裏寫的不夠好和完善的, 我在最終發布這個版本前修改好!

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
   前面介紹了兩個國外的程序, 現在介紹一個我正在改進的系統給大家. 系統也是建立在 qmail + mysql 基礎上的, WEB 部分用 JSP 和 JAVA 完 成, 包括有 WEB 管理功能. 我感覺這個系統很適合中小企業的網站使用, 一 般萬人以內肯定都沒什麽問題, 我花了時間修複了很多系統中存在的 BUG, 目的是想發布一個可以投入正式使用的版本給大家, 當然界面美工不是我的拿 手本事, 這個只有大家自己去做了, 但是基本功能我盡量做到沒有問題. 先提供文檔給大家參考, 我個人網站已經在使用了大家可以去看一下地址是: http://www.fastirc.com/mail/ user: test pass: test ################################################################ 下面是一點關于 JeticMail 的說明 首先感謝 D. J. Bernstein 完成的 qmail-1.03 和 checkpassword-0.9 JeticMail 最先由風雲和青山兩位華源前輩完成, 架構在 www.gbsource.com 上穩定運行了八個月. 隨後由 Capitain (mail:hyzd5@263.net 負責 Java 程序) 和 dennis (mail: zuestc@263.net 系統配置) 加以改進, 增加了 POP3 收 信功能, 並做了部分優化. JeticMail 底層使用 qmail-1.03 來做郵件服務器, 風雲在其基礎上做了部 分改動, 加 入了對 mysql 的支持. 同時在 checkpassword-0.9 也加入了 mysql 支持. 前端使用 jsp 來完成 webmail. 這個系統沿襲了 qmail 獨特 的油箱格式 Maildir, 爲了更好的服務于 webmail 在 /mail/path/Maildir 下采用了五個子目錄, 分別是 dsb, rev, snt, src, tmp, 分別是垃圾箱, 收信箱, 發件箱, 草稿箱, 臨時. 爲了給 GNU 事業做一份貢獻, 爲了大家更好的學習和參考, 他們 opensource 了這個郵件系統, 並且取名爲 JeticMail. ################################################################ 我對 JeticMail 的改進說明 由于華源網絡的倒閉這個項目沒有能夠繼續發展下去, 我對此感到非常的可惜, 畢竟國內這樣實用的好程序真的太少了. 但是自從華源網絡公布這個郵件系統 以後, 到目前爲止真正安裝配置成功的用戶實在太少了, 我覺得這是由多方面 的因素造成的, 首先也是最關鍵的一點就是這個系統自帶的說明文檔太少和太 簡陋了, 其實這也是許多 GPL 項目的一個特點. 其次是原代碼和自帶的某些配 置文件還有腳本中存在許多的小錯誤, 造成了很多用戶遇到無法編譯或者無法 連接數據庫或者無法調用 JAVA servlet 的問題. 再次是許多安裝使用此系統 的朋友是一些 UNIX 新手對 UNIX 和 qmail 以及 mysql jdk 並不是很了解, 于是安裝過程中會走許多的彎路以至最後無法正常使用這個系統. 因爲希望這樣的好程序可以有更多的朋友一起使用和改進, 並充分發揚 GPL 精 神我編寫了這份安裝說明文檔, 並修正了到目前爲止我所發現的所有程序和腳本 以及配置文件中的錯誤, 我將這個程序重新打包提供給需要的朋友使用, 希望 對大家的學習和生活有所幫助. 到目前爲止我除了編寫這個說明外所做的工作如下: 1, 對 qmail-1.03-jeticmail 的核心程序做了調整, 增加了 smtp 發信認證功 能, 同時打了兩個官方網站推薦的補丁. qmail-smtpd.c 來源 http://www.cuni.cz/~vhor/qmail/smtpauth-en.html 這個補丁要比很多文章中說的 http://www.nimh.org/ 上的好許多, 並且增 加了 auth login 的系統日志, 這樣你可以查到那些用戶通過 smtp auth 後 對外發信. 我在它的基礎上做了對 mysql 的支持. 官方網站推薦補丁來源 http://www.qmail.org/top.html#patches 現在關于 qmail 的補丁很多, 但是我建議大家不是官方推薦使用的補丁最好 不要使用, 否則難以確保安全和穩定性能. 2, 修正了 qmail-1.03-jeticmail 和 checkpassword-0.9-jeticmail 在某些環 境下無法編譯通過的問題. 3, 升級原來的 ucspi-tcp-0.84.tar.gz 到最新的 ucspi-tcp-0.88.tar.gz . 4, 修正作者提供的 resin.conf 配置文件中的一個錯誤. 5, 修正 getAttachment.java 中存在的錯誤. 6, 修正了當來信的原始信息中時間爲空值時無法通過 WEBMAIL 收取郵件的問題. 7, 修正了在 WEBMAIL 中發送電子郵件時無法通過地址本導入郵件地址的問題. 8, 對一些 JSP 文件中頁面部分的小錯誤做了一些修改和調整. 做了以上修改後系統基本可以運行投入正式使用了, 當然還是存在許多小錯誤的 我會在以後繼續改進, 另外在爭得作者同意後我會考慮和大家一起繼續發展這個 項目, 推出新的版本增加更多的功能. ################################################################ JeticMail 安裝說明 doc 目錄下是一些說明, 主要是作者自己編寫的程序的使用說明. jsp 目錄下存放的是 WEBMAIL 和 servlet . lib 目錄下是使用 WEBMAIL 所需要的 JAVA CLASS 包. soft 目錄下的東西大家一定知道是什麽我就不再介紹了. old 目錄下是當初作者自己發布的那個安裝包. 我在 RedHat 6.2 和 7.3 下安裝了 JeticMail 都可以正常使用. 其他系統 我沒有做嚴格測試, 這個工作將在以後繼續進行. 將 jsp 和 soft 目錄下的所有東西傳到服務器上, 並且上傳 mysql 和 jdk 的安裝包到你的服務器上. mysql 建議使用 3.22.X 或者 3.23.X 因爲其它 版本我還沒有測試, jdk 我測試的是 1.2.2 和 1.3.1 版本, 最新的 1.4.X 我沒有測試過. resin 我使用的是 1.2.10 原作者使用過 1.2.3 和 1.2.5 更高的版本我沒有用過. 我有朋友在 TOMCAT 下也運行成功了這個系統, 不 過需要調整的配置可能比較多, 有時間我會寫出 TOMCAT 下的配置說明. 注意: 上傳文本文件要用 ASCII 方式, 上傳二進制文件要用 BIN 方式. 下面是安裝示例, 您可以根據實際情況有所變動. 注意: 我是按照下面方法配置的, 如果你有所改動的話需要在相應的配置文件 和程序以及數據庫結構中做一些調整才能正常運行. 在安裝前大家必須首先關閉目前正在使用的郵件系統, 包括 SMTP 以及 POP3 服務, 如果你本來裝的是 qmail 建議將本來的系統刪除, 並且需 要刪除本來安裝 qmail 時增加的所有用戶和組. ################################################################ /htdocs/jeticmail 爲你的 jsp 站點根目錄. /home/mail 爲你的郵件系統用戶目錄的根目錄. /home/mail/attachment 爲臨時保存上傳附件的目錄. /usr/local/mysql 爲 mysql 目錄. /usr/local/resin 爲 resin 目錄. /usr/local/jdk 爲 jdk 目錄. /var/qmail 爲 qmail 目錄. ################################################################ 0. # mkdir /htdocs # mkdir /home/mail # mkdir /home/mail/attachment # chmod -R 777 /home/mail # cp mysql-3.22.X.tar.gz /usr/local/src/ # cp jdk-1_2_2_X-linux-i386.tar.gz /usr/local/src/ # cp qmail-1.03-jeticmail.tar.gz /usr/local/src/ # cp checkpassword-0.9-jeticmail.tar.gz /usr/local/src/ # cp ucspi-tcp-0.88.tar.gz /usr/local/src/ # cp resin-1.2.10.tar.gz /usr/local/src/ # cp -Rf jsp /usr/local/src/ # cd /usr/local/src/ # tar -xzvf mysql-3.22.X.tar.gz # tar -xzvf jdk-1_2_2_X-linux-i386.tar.gz # tar -xzvf resin-1.2.10.tar.gz 1. 安裝 mysql 數據庫軟件. # cd /usr/local/src/mysql-3.22.X # ./configure --prefix=/usr/local/mysql # make # make install # cd /usr/local/mysql/bin # ./mysql_db_install # cp ../share/mysql/mysql.server ./ # chmod 711 mysql.server # ./mysql.server start (啓動 mysql 數據庫) # cd /etc/rc.d # vi rc.local 在最後一行添加: /usr/local/mysql/bin/mysql.server start (系統啓動時自動啓動 mysql 數據庫) # cd init.d # vi killall 在最後一行添加: /usr/local/mysql/bin/mysql.server stop (系統關閉時自動關閉 mysql 數據庫) # vi /etc/profile 增加路徑, 在 PATH 行尾加上: /usr/local/mysql/bin:/usr/local/bin 以 ":" 間隔. # ./mysqladmin -u root password .... 設置你的 mysql 管理員密鑰. # mysql -u root -p -h localhost 系統會提示輸入密碼輸入你剛設置好的密碼就可以進入 mysql 字符管理截面. # mysql grant all privileges on *.* to root@127.0.0.1 identified by 'your_password'; 這一步操作一定不能少, 目的是在 mysql 中建立一個 root@127.0.0.1 的用戶, 這個用戶擁有對 所有數據庫的操作權限, 但是不具備開設其他用戶的權限. 因爲 JDBC 驅動只接受 uid@127.0.0.1 這樣的方式連接數據庫而不接受 uid@localhost 所以你必須增加這樣的一個數據庫用戶. 以上操作完成後在 mysql 中建立 jeticmail 數據庫, 並將 jeticmail.sql 的內容導入到該數據庫中. 注意: mysql 3.23.X 需要使用 mysql 用戶來安裝, 如果你使用這個版本的 mysql 請先在你的系統中 添加 mysql 用戶, 並將 mysql 安裝到的目錄的所有權給 mysql 用戶, 我這裏就不具體介紹了. 2. 安裝 jdk 環境. # cd /usr/local/src # mv jdk1.2.2 /usr/local/jdk # ln -s /usr/local/jdk/jre /usr/local/jre # vi /etc/profile (設置你的環境變量) 在 PATH 行尾加上: /usr/local/jdk/bin 加入以下幾行: CLASSPATH=/usr/local/jdk/lib/tools.jar:/usr/local/jdk/lib:/usr/local/jdk/jre/lib:./:/usr/local/jdk/lib/tomcatjsp.jar:/usr/local/jdk/lib/mm.mysql-2.0.7-bin.jar:/usr/local/jdk/lib/jsdk23.jar export CLASSPATH JAVA_HOME=/usr/local/jdk export JAVA_HOME 保存該文件後推出系統從新登陸以獲得新的環境變量並將本軟件包中 lib 目錄下的所有文件複制到 /usr/local/jdk/lib 目錄下, 然後你需要 login out 一下重新登陸系統, 這樣你設置的全局環境 變量才能起效. 注意: Redhat 7.x 開始以及其他一些 *nix 系統采用了 glibc 2.2.x 的庫環境, 在使用這個版本的 庫環境下 jdk1.2.2 無法正常使用, 你必須安裝 jdk1.3.1 或更高版本. 3. 安裝 qmail 郵件傳輸代理程序. # cd /usr/local/src/ # tar -xzvf qmail-1.03-jeticmail.tar.gz # cd qmail-1.03 # vi Makefile 編輯 Makefile 文件修改其中的一行: 在 mysql 3.23.X 系統中: MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm -lz 在 mysql 3.22.X 系統中: MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm 注意: Makefile 文件中的 MYSQL_LIBS 和 MYSQL_INCLUDE 路徑可能由于安裝 mysql 的方式不同會不一樣 你需要根據自己的實際情況做調整. # ./install.sh yourdomainname # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak # mv /usr/lib/sendmail /usr/lib/sendmail.bak # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # cp /var/qmail/boot/proc /var/qmail/rc # vi /var/qmail/rc 將其內容改爲: #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail # cd /usr/local/src/ # tar -xzvf ucspi-tcp-0.88.tar.gz # cd ucspi-tcp-0.88 # make # make setup check # cd .. # vi tcp.smtp 內容如下: 127.0.0.1:allow,RELAYCLIENT="" :allow # cp tcp.smtp /etc # cd /etc # /usr/local/bin/tcprules tcp.smtp.cdb tcp.smtp.tmp # cd /usr/local/src/ # tar -xzvf checkpassword-0.9-jeticmail.tar.gz # cd checkpassword-0.9 # vi Makefile 編輯 Makefile 文件修改其中的一行: 在 mysql 3.23.X 系統中: MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm -lz 在 mysql 3.22.X 系統中: MYSQL_LIBS=/usr/local/mysql/lib/mysql/libmysqlclient.a -lm 注意: Makefile 文件中的 MYSQL_LIBS 和 MYSQL_INCLUDE 路徑可能由于安裝 mysql 的方式不同會不一樣 你需要根據自己的實際情況做調整. # make # make setup check # chmod 4755 /var/qmail/bin/checkpassword 在 /var/qmail/control 裏寫一個文件 sqlserver 文件內容爲: server localhost port 3306 login root password yourpassword db jeticmail 注釋: server Mysql 服務器的名字 port Mysql 端口 login 登陸 Mysql 的用戶名 password 登陸 Mysql 的密碼 db 數據庫的名字 如果郵件到: user1@domain1, qmail-mysql 將在 mbox_host 和 id 字段. # vi /bin/smtp SMTP 啓動腳本內容如下: #!/bin/sh /usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 200 -x /etc/tcp.smtp.cdb -u 444 -g 444 0 smtp /var/qmail/bin/qmail-smtpd /var/qmail/bin/checkpassword /bin/true 2%26amp;1 | /var/qmail/bin/splogger smtpd 3 %26amp; # vi /bin/pop3 POP3 啓動腳本內容如下: #!/bin/sh /usr/local/bin/tcpserver -c 200 -v 0 pop3 /var/qmail/bin/qmail-popup yourdomainname /var/qmail/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir %26amp; POP3 啓動腳本你需要查看一下你的 /etc/services 文件, 如果其中指定的是 pop-3 那麽腳本裏 也要修改成 pop-3 . 另外以上兩個腳本除了 #!/bin/sh 其它部分都要寫在一行裏. # csh -cf '/var/qmail/rc %26amp;' (啓動 qmail 後台程序) # /bin/smtp (啓動 smtp) # /bin/pop3 (啓動 pop3) 4. 安裝 resin-1.2.10 (jsp 服務器). # mv /usr/local/src/resin-1.2.10 /usr/local/resin # export RESIN_HOME=/usr/local/resin/ # cp /usr/local/src/resin.conf /usr/local/resin/conf/ (或者$RESIN_HOME/conf/) 注意: 請使用我配置好的 resin 的配置文件 resin.conf 如果你要自己優化配置, 請注意要取消 這個項, 否則不能上傳附件. 5. 安裝 jeticmail (安裝前端 jsp 界面). # cp /usr/local/src/jsp /htdocs/jeticmail 這個命令的意思是把本軟件包裏的 jsp 目錄下面的所有文件和子目錄全部複制到 /htdocs/jeticmail 下. 注意: jsp 連接 mysql 的驅動已經打包在了 lib 目錄的 mm.mysql-2.0.7-bin.jar 中所以不需要另外安裝了. 我對代碼分析和實際檢驗後發現目前的 WEBMAIL 可以使用的最高版本 mysql jdbc 驅動就是這個, 如果 你需要升級 mysql jdbc 驅動那你可能需要對 WEBMAIL 部分的代碼自己做一些修改和調整才能運行. 6. 配置 jeticmail. 修改: /htdocs/jeticmail/WEB-INF/jeticmail.properties 配置好你的連接數據庫用戶密碼等...... # /usr/local/resin/bin/httpd.sh start (啓動 resin 服務器) 7. 訪問 jeticmail. 啓動 resin 後就可以通過 http://yourdomainname:8080 訪問 jeticmail 了. 系統管理員界面地址是 http://yourdomainname:8080/admin/ 初始系統管理員帳號: admin 初始系統管理員密碼: 123456 你可以在 mysql 的 jeticmail 數據庫中的 admin 表中修改這個密碼, 對應字段是 password 但是你必須使用 mysql 自帶的 password 函數生成這個密碼, 一個簡單的處理辦法是你可以 先在 WEBMAIL 中注冊一個用戶輸入, 當這個用戶密碼生效後, 你可以查看數據庫將産生的密碼 複制到 admin 表相應的地方. 8. 測試. 本地Mail測試: % echo to: me | /var/qmail/bin/qmail-inject 注意: 要用你的用戶名代替 me Mail 應該立即出現在你的信箱之中 ./var/log/maillog 中應該有如下記錄: qmail: new msg 53 qmail: info msg 53: bytes 246 from qp 20345 uid 666 qmail: starting delivery 1: msg 53 to local me@domain qmail: status: local 1/10 remote 0/20 qmail: delivery 1: success: did_1+0+0/ qmail: status: local 0/10 remote 0/20 qmail: end msg 53 給一個不存在的本地用戶發信: %echo to: nonexistent | /var/qmail/bin/qmail-inject qmail: new msg 53 qmail: info msg 53: bytes 246 from qp 20351 uid 666 qmail: starting delivery 2: msg 53 to local nonexistent@domain qmail: status: local 1/10 remote 0/20 qmail: delivery 2: failure: No_such_address.__#5.1.1_/ qmail: status: local 0/10 remote 0/20 qmail: bounce msg 53 qp 20357 qmail: end msg 53 qmail: new msg 54 qmail: info msg 54: bytes 743 from qp 20357 uid 666 qmail: starting delivery 3: msg 54 to local me@domain qmail: status: local 1/10 remote 0/20 qmail: delivery 3: success: did_1+0+0/ qmail: status: local 0/10 remote 0/20 qmail: end msg 54 遠程投遞測試: 向你在其他機器上的賬戶發信: % echo to: me@wherever | /var/qmail/bin/qmail-inject qmail: new msg 53 qmail: info msg 53: bytes 246 from qp 20372 uid 666 qmail: starting delivery 4: msg 53 to remote me@wherever qmail: status: local 0/10 remote 1/20 qmail: delivery 4: success: 1.2.3.4_accepted_message./... qmail: status: local 0/10 remote 0/20 qmail: end msg 53 投遞過程將在 starting delivery 和 success 中有個間斷, SMTP 傳送是相對較慢的. 然後去檢查一下 me@wherever 是否正確收到 email. 後面還有三個測試, 分別測試本地 postmaster, 兩次彈回 mail 和通過 mail 執行. 命令. 具體方法可以在 TEST.deliver 中找到. SMTP Server測試, me 是你的用戶, domain 是你的機器名. % telnet 127.0.0.1 25 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 domain ESMTP helo dude 250 domain mail 250 ok rcpt 250 ok data 354 go ahead Subject: testing This is a test. . 250 ok 812345679 qp 12345 quit 測試一下 mysql 的版本: shell # ./qmail-getpw user1 somewhere.com user1123456778/somewhere/username 反回了用戶的 id, uid, gid, home 字段的內容 如果不能找到改用戶, 則返回 'qmail alias' 例如: shell # ./qmail-getpw u1 a alias7065534/var/qmail/alias-u1 如果你啓動 mysqld 時加了 --log 選項, 可以看 mysql 的 log 文件 9. jeticmail 調試. 因爲我們的 jeticmail 系統是基于 qmail-1.03 的, 所以請參考 qmail 的 man, 會受益非淺. java 和 jsp 方面的問題請參考 resin 的日志, 或者在前台運行 resin 或者 tomcat, 查看 java 的抛出異常. 因爲增加了 smtp 發信認證你需要在你的郵件客戶端軟件中做相應的設置才 可以使用 smtp 對外發信, 當然通過浏覽器進入郵件系統, 在任何地方都可正常收發電子郵件. ################################################################ 以上就是我的安裝過程, 我正在自己個人網站 http://www.fastirc.com/mail/ 使用這個系統有問題的朋友可以發我 EMAIL: webmaster@fastirc.com 另外需要一起交流討論郵件系統的朋友可以加我的 QQ: 8273949 ################################################################ 目前還有兩個 WEBMAIL 部分的 BUG 我在修複, 大家也可以看看我以上的說明 那裏寫的不夠好和完善的, 我在最終發布這個版本前修改好!
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有