實踐證明,基于Windows NT 的Exchange Server并不是企業級電子郵件系統的最佳選擇。由于對穩定性等性能要求非常高,因此大型電子郵件系統一般都使用UNIX作為服務器的操作系統,例如,Hotmail使用FreeBSD和Solaris,國內163等站點也是采用BSD系列。追求穩定的大型企業可采用FreeBSD和Solaris,普通中小企業可采用Linux。
傳統的UNIX系統下的電子郵件系統由于設計所能承受的用戶數有限,其系統結構存在一定的缺陷,難以承受大用戶量的訪問。比如,應用非常廣泛的Sendmail系統就存在如下幾個局限性:
* 由于其用戶信息存放于/etc/passwd文件中,在大用戶量的情況下認證效率將會大大降低;
* 郵件存放通常在/var/mail目錄下面,每個人的郵件是一個文件,用戶數多則郵件文件就多。而在UNIX系統中,同一級目錄中的文件超過一定數量后,文件系統運轉效率將會大大降低。當使用NFS共享存儲空間的時候,還會產生一個嚴重的問題——由于NFS缺乏文件鎖定機制,在使用傳統的用戶郵件存儲格式Mailbox時,由于所有的郵件都保存在同一個文件中,因此進行郵件操作就必須加鎖,以保證沒有訪問沖突,這就使得它不適合NFS存儲方式;
* 由于每一個用戶的多封郵件都位于同一個文件中,所以如果在用戶取信過程中出現網絡異常,則很容易引起郵箱的死鎖。
上述問題大大限制了Sendmail郵件系統在用戶數量較大情況下的應用。另外,如果完全以系統用戶做為郵件系統的用戶也存在嚴重的安全隱患。因此,如果要適應大容量的需要,必須從郵件系統體系結構上,特別是郵件存貯方式和用戶認證方式上進行改進,使之在大用戶量的情況下仍舊能夠保持良好的性能。
Qmail是可以完全替代Sendmail-binmail體系的新一代UNIX郵件系統,它也是一個基于UNIX操作系統的Internet郵件傳輸機構( Internet Mail Transfer Agent 簡稱MTA)。它采用標準的簡單郵件傳輸協議(Simple Mail Transfer Protocol 簡稱SMTP)與Internet上其他MTA交換信息。為了解決用戶郵件存儲問題,Qmail提出了Maildir存儲方式,每個郵件作為單獨的一個文件保存在用戶個人的郵件目錄下,這就避免了加鎖。同時,Qmail支持虛擬域(Virtual Domain)和虛擬用戶(Virtual User),使郵件系統的用戶獨立于UNIX系統用戶。與Sendmail相比,Qmail有以下優點:
*安全---- Qmail將E-mail處理過程分為多個分過程,盡量避免以Root用戶身份運行。同時Qmail也禁止對特權用戶(Root、Deamon等)直接發信。
*可靠---- Qmail的直接投遞保證了E-mail在投遞過程中不會丟失。Qmail同時支持新的更可靠的信箱格式——Maildir,保證系統在突然崩潰情況下不至破壞整個信箱。
* 高效----運行在奔騰的BSD上,Qmail每天可以輕松地投遞20萬封電子郵件。
*簡單---- Qmail 要比其他的Internet Mail系統小得多。 它通過統一的向前機制完成Forwarding、Alias和Maillist等功能, Qmail使用簡單高效隊列來處理投遞。Qmail-SMTPD可以由Inetd啟動,節省了一定資源。
當前在國內最流行的免費電子郵件系統如163、371等,都是使用網易公司開發的系統。這些系統就是采用Qmail作為基本服務器軟件,采用NFS網絡文件系統作為用戶郵件存儲空間,使用Maildir作為郵件存儲格式,提供多級目錄以支持較大的用戶數。
與Internet上的免費電子郵件系統相比,大中型企業電子郵件系統用戶主要為企業內部用戶,雖然數量沒有上十萬、百萬那么多,用戶群也相對固定,但對系統的安全性、穩定性的要求更高,用戶管理工作也更細致、繁瑣。如果能采用統一的Web 形式建立完善的用戶數據庫并提供郵件服務和用戶管理,則會在方便用戶的同時,大大地減輕系統管理員繁瑣的工作。
Qmail是GNU下的一個著名的自由軟件,世界各地的高手們為進一步完善和擴充它的功能,開發了大量的基于Qmail的工具和補丁軟件,VmailMgr(Virtual Mail ManaGeR)就是其中之一。它增強了Qmail虛擬域(Virtual Domain)的功能,提供了大量的命令,以方便建立和管理獨立于UNIX系統用戶的郵件系統用戶,提供軟、硬空間限額等豐富的管理功能;郵件服務器的虛擬用戶也可以通過POP3、IMAP標準協議訪問自己的郵箱。特別值得一提的是,VmailMgr還提供一組CGI程序和PHP函數,有了這組程序,用戶們可以通過Web頁面進行郵箱申請、密碼更換,郵件管理員也可以通過Web頁面輕松完成用戶管理和郵件系統的配置工作。
一個優秀的大型企業電子郵件系統應該具備以下功能:
1. 為企業內部用戶提供大規模高速安全可靠的郵件服務,用戶數量可達數千至數萬人。
2. 郵件系統支持各種E-mail的標準協議,提供POP3和IMAP郵件訪問方式。
3. 提供WebMail的功能,用戶只需要一個瀏覽器,便能完成所有郵件的操作。
4.為每個用戶提供20MB或更大的大容量郵件存儲空間。
5.為用戶提供Mailing List、郵件轉寄、別名等功能。
6. 建立用戶數據庫系統,保存用戶注冊時的個人信息,方便用戶管理。
7. 為日常維護人員提供完全基于瀏覽器的日常管
大家都看到了Qmail的諸多優點,下面我就介紹一下它的安裝及使用方法。
Qmail安裝及設定
個人qmail安裝及設定過程,希望對大家有用
1. 如何獲得Qmail?
可以通過訪問或mirror站點下載qmail-1.03.tar.gz,以及獲得
更多qmail的資料.
2 安裝Qmail
獲得qmail-1.03.tar.gz后,用tar命令解包
#tar xzvf qmail-1.03.tar.gz
進入qmail目錄后,仔細閱讀一下README和INSTALL文件.然后開始編譯qmail.
2.1 建/var/qmail目錄:
#mkdir /var/qmail
2.2 按照INSTALL.ids中方法建立qmail用戶和組:
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
2.3 make setup check
2.4 閱讀INSTALL.ctl和FAQ,配置qmail,最簡單的方法是
#./config
或者
#./config-fast your.full.home.name
2.5 建立系統別名
# (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
# chmod 644 ~alias/.qmail*
2.6 復制/var/qmail/boot/proc到/var/qmail/rc
# cp /var/qmail/boot/proc /var/qmail/rc
2.7 開始測試Qmail投遞程序
啟動qmail:
# csh -cf ’/var/qmail/rc &’
先查看一下/var/log/maillog,搜索
qmail: status: local 0/10 remote 0/20
qmail-send通常是輸出"status"或者"cannot start"如果不能正常啟動.
用ps監視一下qmail守護進程,應該有五個相關進程:
qmail-send,以qmails用戶運行
qmail-lspawn,以root用戶運行
qmail-rspawn,以qmailr用戶運行
qmail-clean,以qmailq用戶運行
splogger,以qmaill用戶運行
本地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
qmail: status: local 1/10 remote 0/20
qmail: delivery 1: suclearcase/" target="_blank" >ccess: did_1+0+0/
qmail: status: local 0/10 remote 0/20
qmail: end msg 53
53是inode號,20345是進程號,你的數字應該有所不同.
本地錯誤測試:
給一個不存在的本地用戶發信:
% 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
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
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: | /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
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傳送是相對較慢的
然后去檢查一下是否正確收到email.
后面還有三個測試,分別測試本地postmaster,兩次彈回mail和通過mail執行
命令.具體方法可以在TEST.deliver中找到.
2.8 從Sendmail象Qmail轉移.
2.8.1 首先找到sendmail的啟動程序,一般是在/etc/rc.d目錄中
看上去象這樣的命令:
sendmail -bd -q15m
將其注釋掉.
2.8.2 殺掉Sendmail進程.
如果sendmail有子進程,可以反復用-STOP和-CONT信號殺,直到沒有
子進程后用-TERM后加-CONT殺就可以了.
2.8.3 檢查mail隊列中是否還有信,如果認為有必要將他們發送出去,可以在
以后一段時間不定期的運行sendmail.bak -q直到隊列清空.
2.8.4 去掉sendmail等文件的setuid bit
# chmod 0 /usr/lib/sendmail
# chmod 0 /usr/sbin/sendmail
# chmod 0 /usr/lib/sendmail.mx
2.8.5
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
2.8.6 將
csh -cf ’/var/qmail/rc &’
添加到啟動文件中去.
2.8.7 安裝qmail的sendmail外殼:
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
2.8.8 在/etc/inetd.conf中設置qmail-smtpd:(是一行)
smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env
tcp-env /var/qmail/bin/qmail-smtpd
2.8.9 重啟動inetd,用-HUP信號殺inetd及可.
2.9.1 使用qmail的maildir(這個問題麻煩我好幾天)
每個用戶目錄內:/var/qmail/bin/maildirmake /home/$LOGINNAME/Maildir
2.9.2 這一步不做好象也可以
add a line to "/home/u user name/.bash_profile"
MAIL=/home/$LOGINNAME/Maildir/
export MAIL
2.9.3 pop3
去去下載checkpassword,(這個東西qmail不自帶)并編譯
inet.conf 中的pop-3
pop-3 stream tcp nowait qmaild /var/qmail/bin/qmail-popup mydomain
.com /bin/checkpassword /var/qmail/bin/qmail-pop3d (在一行)
2.9.4 rc文件
cp /var/qmail/boot/home /var/qmail/rc
修改rc文件變成如下
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail
3 qmail的一些特殊配制
3.1 如何設置Smart Host:
# echo ":your.smart.host" > /var/qmail/control/smtproutes
3.2 為其它主機轉信
在/var/qmail/control/rcpthosts添加
21cn.com
163.com
3.3設置主機多個域名
將名稱加入/var/qmail/control/local,/var/qmail/control/rcpthosts
/var/qmail/control/me
3.4 別名
本機不存的的進行轉發
如:用戶本地不存在) 轉發給(user1為
本地用戶)
方法:
echo "user1">/var/qmail/alias/.qmail-webmaster
或
echo "
完全的email地址
3.5 群發mailist
假如發信給時同多人可編輯
/var/qmail/alias/.qmail-list內添加
user1
user2
user3
3.6 本地用戶擴展
user1,q1,q2,qq為本地用戶user1-s1,user1-s2,user1-xxx不是本地用戶
設定發信給:user1-s1轉為q1,user1-s2轉為q2,
user1-21轉為轉為
user1-xxx(xxx表示其它名稱)轉為qq,
echo "q1">/home/user1/.qmail-s1
echo "
echo "q2">/home/user1/.qmail-s2
echo "qq">/home/user1/.qmail-default
編輯/home/user1/.qmail-list內容為
q1
q2
3.7 如何設置
如:
ttt.com 設定 轉給本地用戶tttweb
設定 轉給外地用戶
設定 其它@ttt.com 轉給本地用戶tttother
方法:
(1)將ttt.com加入/var/qmail/control/local和/var/qmail/control/rcpthosts
(2) 然后在/var/qmail/control/virtualdomains中加入
your.virtual.domains:tttcom
(3) 加一個用戶tttcom
adduser tttcom
這樣所有發往都將以
的形式發給testcom,
(4) echo "tttweb">/home/testcom/.qmail-webmaster
echo "
echo "tttother">/home/testcom/.qmail-default
(5)從新啟動qmail
3.8 抄送
如:發信給 ,同時抄送給user2,dd@21cn.com
方法:編輯/home/user1/.qamil 內容如下
./Maildir/
|forward user2
3.9 轉信
轉向
方法:編輯/home/user1/.qamil 內容如下
3.10 如何設置 qmail 為對外smtp服務器?(去掉轉信和發信的限止)
去掉/var/qmail/control/rcpthosts文件