用PHP開發qmail郵件服務器管理系統

發表于:2007-09-07來源:作者:點擊數: 標簽:
電子郵件在 網絡 中占有很重要的地位。目前,在企業中運行的郵件 服務器 均用各自獨立的管理系統來實現賬號創建、口令修改、郵箱擴容、刪除郵箱等功能。當郵箱用戶達到一定數量時,郵件管理員的日常維護工作顯得極為繁重,這就需要將一部分管理任務(如賬號
  電子郵件在網絡中占有很重要的地位。目前,在企業中運行的郵件服務器均用各自獨立的管理系統來實現賬號創建、口令修改、郵箱擴容、刪除郵箱等功能。當郵箱用戶達到一定數量時,郵件管理員的日常維護工作顯得極為繁重,這就需要將一部分管理任務(如賬號申請)實現自動化處理;同時將一部分任務(如口令修改)由多個分組管理員來負責,從而使郵件管理員從繁瑣的維護工作中解脫出來,真正對郵件服務器起到監管作用。

  郵件服務器及開發環境的選擇

  目前很多郵件服務器不提供開發接口,因此在企業內部實現開發郵件管理系統的首要問題是,尋找一種能夠與開發語言相結合的開放式郵件系統。

  由于對穩定性要求很高,因此大型電子郵件系統一般都使用Unix作為服務器的操作系統。例如,Hotmail使用的是FreeBSD和Solaris系統。

  Linux自帶的郵件由于在系統結構上存在一定缺陷,難以承受大用戶量的訪問。qmail是GNU下一款著名的自由軟件,是新一代Unix郵件系統,支持Maildir存儲方式。它把每個郵件作為一個單獨的文件保存在用戶個人的郵件目錄下。qmail支持虛擬域(Virtual Domain)和虛擬用戶(Virtual User)。當前國內流行的免費電子郵件系統大都采用qmail作為基本服務器軟件,提供多級目錄以支持較大的用戶數。

  從開發的角度看,PHP+Linux的開發模式已被許多開發人員采用。利用PHP來調用qmail提供的控制程序,實現對郵件系統的各種管理工作。為實現對大量用戶的有效控制,還可引入數據庫管理。本文將介紹一個PHP +Oracle+qmail+Linux的開發實例。

  總體設計

  整個系統分為郵箱管理和郵件收發兩部分。申請郵箱時,先填寫一些必要的信息,然后系統會自動地創建郵箱并允許用戶立即使用。當用戶忘記密碼后,可采用目前互聯網的通用做法,通過回答用戶自定義的問題來修改郵箱密碼。出于安全考慮,在用戶三次回答錯問題后,系統將該賬號的“修復郵箱密碼”功能鎖定30分鐘。

  郵件管理依據不同的需求,將用戶權限分為以下3種級別:

  ◆ 普通用戶 能夠在瀏覽器中收發電子郵件、修改郵箱密碼、修改自定義問題和答案,并進行郵箱的查詢。

  ◆ 分組管理員 除擁有普通用戶的功能外,可以修改本組內所有賬號的密碼,解除本科室賬號的“修復郵箱密碼”功能鎖定。

  ◆ 郵箱管理員 可以修改全部郵箱口令、刪除郵箱、修改郵箱容量、查看郵箱的申請情況,解除全部賬號的“修復郵箱密碼”功能鎖定。

  郵件的收發采用PHP提供的標準POP3函數,可獲得郵件清單、查看郵件的詳細內容、發送帶多個附件的郵件,并提供郵件刪除、回復等功能。

  數據庫主要由以下幾個表組成:

  ◆ email_info 存放所有電子郵箱的相關信息,如賬號、人員姓名、科室、聯系電話、自定義問題、自定義問題的答案、鎖定標記等。

  ◆ email_register_info 存放用戶申請電子郵件時填寫的信息,如賬號、密碼、申請時間、科室、申請的當前步驟(主要是為了防止用戶惡意跳過某些步驟而設定的)。

  ◆ email_change_log 記錄用戶電子郵箱的變化情況,以備日后需要時檢查。主要記錄有郵件的申請時間、刪除時間、郵箱賬號、對郵箱操作的人員姓名、IP地址等信息。

  技術難點分析

  PHP調用qmail的控制程序

  在Linux環境中,每一個程序都有相應的用戶和組的概念。PHP程序在服務器中執行時,默認的用戶是nobody,沒有權利執行qmail的控制程序。在Linux里面有個sudo命令,允許其它用戶以root身份執行一些命令。修改/etc/sudoers文件,增加以下部分:

  nobody ALL=/var/vpopmail/bin/vadduser (增加用戶)

    nobody ALL=/var/vpopmail/bin/vdeluser (刪除用戶)

    nobody ALL=/var/vpopmail/bin/vpasswd (修改口令)

    nobody ALL=/var/vpopmail/bin/vchkpw (檢查用戶口令是否正確)

    nobody ALL=/var/vpopmail/bin/vsetuserquota (修改郵箱最大容量)

    nobody ALL=/var/vpopmail/bin/vmoduser (修改用戶信息)

    root ALL=(ALL) ALL  

  在調用qmail控制程序時,需要用戶手工輸入一部分信息。如果要實現自動化,還需要使用Linux中的重定向技術,將用戶預先輸入的信息存放到文件中,使用重定向技術傳遞為Shell腳本。

  PHP提供執行外部命令的函數為system()、exec()。system()函數執行給定的命令、輸出和返回結果。exec()函數與system()類似,但不輸出結果。使用程序控制必須選用exec()函數,并根據執行后的狀態來確定控制程序是否正確執行,如果出現錯誤需要向郵件管理員通告。下面代碼以“增加用戶”功能為例進行說明:

 ?。ㄎ赐辏?
<

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97