Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

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

          開放原代碼的 Qmail+Mysql+Jsp 中文電子郵局系統說明
          2005-08-24 10:00 am
          作者:linux寶庫 (http://www.linuxmine.com)
          來自:linux寶庫 (http://www.linuxmine.com)
          聯系:linuxmine#gmail.com

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

          系統也是建立在 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 < /etc/tcp.smtp
          # 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>&1 | /var/qmail/bin/splogger smtpd 3 &

          # 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 &

          POP3
          啟動腳本你需要查看一下你的 /etc/services 文件, 如果其中指定的是 pop-3 那么腳本里
          也要修改成 pop-3 . 另外以上兩個腳本除了 #!/bin/sh 其它部分都要寫在一行里.

          # csh -cf '/var/qmail/rc &' (
          啟動 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 如果你要自己優化配置, 請注意要取消
          <multipart-form/>
          這個項, 否則不能上傳附件.

          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 <me@domain> 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 <me@domain> 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 <me@domain> 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 <me@domain>
          250 ok
          rcpt <me@domain>
          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 我在修復, 大家也可以看看我以上的說明
          那里寫的不夠好和完善的, 我在最終發布這個版本前修改好!

           

          posted on 2006-03-02 13:46 都市淘沙者 閱讀(743) 評論(0)  編輯  收藏 所屬分類: Linux/OpenVPN/Python

          主站蜘蛛池模板: 金秀| 泸水县| 长泰县| 西峡县| 珲春市| 新沂市| 高陵县| 扎赉特旗| 闽清县| 新兴县| 大埔县| 施甸县| 凤庆县| 溆浦县| 岳池县| 志丹县| 安龙县| 麻栗坡县| 革吉县| 揭阳市| 永泰县| 商丘市| 九江县| 克拉玛依市| 五河县| 南皮县| 攀枝花市| 榆林市| 平定县| 水富县| 偃师市| 乌鲁木齐市| 临高县| 麻阳| 郧西县| 宜州市| 长宁县| 弥勒县| 镇坪县| 民乐县| 双江|