構建全功能的郵件系統 (轉)

worldblog發表於2007-12-12
構建全功能的郵件系統 (轉)[@more@]建全功能的

張紹忠

E已經成為網際網路上最重要的服務之一。無論菜鳥或大蝦,他可能沒用過,沒上過BBS,沒有自己的主頁,但他一定有一個自己的電子。隨著網際網路的發展,電子郵箱收費已是大勢所趨。雖然還有免費的存在,但網站們為了突出收費郵箱的“優勢”,有意無意的降低了免費郵箱的服務標準,導致經常丟失信件。收費信箱是好,可是得出錢,而且還有容量限制,速度也不見得快。
園區網建起來後,如果能建設一個自己的郵件系統,向廣大員工提供免費的、無空間限制、的電子郵箱,一定會大受歡迎。只要你有一臺普通的PC,你就不需要花一分錢!因為我們採用的全部是(開放)的,可免費獲得。
更重要的是,這套系統可稱得上是全功能的:可以實現一個流行的郵件系統所支援的幾乎所有功能,包括髮送附件、POP3或IMAP收信方式、夾管理、通訊錄、修改密碼等。如果你願意,還可實現日曆、記事本等功能。而這一切功能都可以透過方式實現,即Web mail。
怎麼樣,心動啦?那就隨我來!內容較多,先把目錄列出來:
【目錄】
一.郵件系統的基本原理
二.需要的環境
三.
四.安裝
五.安裝IMAP
六.安裝Web mail支援——、My和
七.安裝Web mail
八.安裝通訊錄模組
九.安裝修改密碼模組

一. 郵件系統的基本原理
首先讓我們來了解一下電子郵件系統的基本原理。這裡只做一個簡單介紹,詳細的可參考有關書籍。
一般情況下,我們把電子郵件分解成使用者,傳輸代理和投遞代理。 使用者代理將使用者的信件傳送至傳輸代理(如 Express、FoxMail等)。郵件傳輸代理負責將郵件送到目標主機(如sendmail)。而投遞代理則從信件傳輸代理取得信件傳送至終端使用者的郵箱(如procmail)。
我們來模擬一封郵件從發出到收到的過程。使用者使用Outlook Express(使用者代理或叫做郵件客戶端)向Sendmail(傳輸代理)請求傳送電子郵件的服務,將郵件交給Sendmail。Sendmail根據郵件的目的地址,將郵件傳送給郵件接收,郵件接收伺服器將郵件快取(這也是Sendmail的工作)。接收郵件的使用者用Outlook Express向郵件接收伺服器發出取信的請求,郵件接收伺服器將郵件傳送給使用者(這是IMAP或POP服務的工作)。至此,一封郵件從傳送者的機器到達接收者的機器。
我們要建立的,以優越的 7.3為作業系統。以Sendmail作郵件傳輸服務,IMAP作收信服務來構成郵件系統的基本。以Horde Imp作為郵件的Web客戶端。剩下的就是Horde Imp的支援軟體:以使用者資料,以Apache+PHP作為Web伺服器。我們還使用其它的模組來擴充本系統的功能:通訊錄模組和修改密碼模組。
我們將安裝下列軟體:
1. RedHat linux7.3
作用:作業系統
地址:
2. Sendmail-8.11.6
作用:郵件傳輸和接收
下載地址:(RedHat linux7.3自帶)
3. Imap
作用:IMAP和POP3伺服器
下載地址:ftp://ftp.cac.washington.edu/imap/imap-2001a.tar.Z
4. Apache-1.3.24
作用:Web伺服器
下載地址:
5. PHP-4.2.1
作用:CGI指令碼語言
下載地址:
6. PEAR-4.1.0
作用:PHP的功能擴充套件模組
下載地址:ftp://ftp.horde.org/pub/horde/tarballs/pear-4.1.0.tar.gz
7. MySql
作用:,儲存郵件使用者資料和通訊錄
下載地址:
8. Horde-2.1
作用:Imp的支援模組
下載地址:ftp://ftp.horde.org/pub/horde/tarballs/horde-2.1.tar.gz
:ftp://ftp.horde.org/pub/horde/tarballs/patch-horde-2.0-2.1.gz
9. Imp-3.1
作用:Web mail的核心程式
下載地址:ftp://ftp.horde.org/pub/imp/tarballs/imp-3.1.tar.gz
補丁:ftp://ftp.horde.org/pub/imp/tarballs/patch-imp-3.0-3.1.gz
10.Turba-1.1
作用:提供通訊錄功能的模組
下載地址:ftp://ftp.horde.org/pub/turba/tarballs/turba-1.1.tar.gz
補丁:ftp://ftp.horde.org/pub/turba/tarballs/patch-turba-1.0-1.1.gz
11.Poppassd-1.8.2
作用:修改密碼的服務,與Passwd for imp結合提供Web方式修改使用者密碼的功能。
下載地址:
12.Passwd for imp
作用:提供修改密碼功能的模組
下載地址:
二. 需要的網路環境
本文假設使用者希望在園區網中架設一個電子郵件伺服器,為本單位使用者提供郵件服務。該伺服器擁有一個合法的202.99.11.200和一個合法的域名mail.example.com,並且example.com的的MX記錄指向mail.example.com。
注:為了滿足域名需求,example.com的DNS的域資料檔案應該包含以下內容:
IN MX 10 mail
mail IN A 202.99.11.200
三. 安裝作業系統RedHat Linux7.3
RedHat Linux7.3的安裝在很多資料中已有詳細說明。這裡只說一下分割槽的問題,作為一個郵件系統,主要的空間用於儲存使用者的郵件。我們把大部分軟體安裝在/usr,而使用者收到的郵件儲存在/var,使用者處理(刪除、移動等)後的郵件儲存在/home。大家要根據自己的情況確定合理的分割槽方案。
四. 安裝Sendmail
其實上,RedHat Linux7.3安裝完成後,Sendmail就被安裝了。如果沒有,可從RedHat Linux7.3的第一張安裝盤中用RPM包進行安裝。接下來我們只對Sendmail進行一些簡單的設定。
Sendmail的檔案主要是/etc/sendmail.cf。這裡,我們需要修改兩個地方:
原內容: Cwlocalhost (大約在83行)
修改為: Cwexample.
作用:定義郵件的域
原內容:O deamonPortoptions=Port=smtp,Addr=127.0.0.1 … (大約在260行)
修改為:(將此行註釋掉)
作用:此行的作用是隻允從本機使用smtp服務,作為一個郵件系統,這顯然是不行的。
修改完成後,鍵入:
#/etc/rc.d/init.d/sendmail restart
重啟sendmail,使修改生效。
五. 安裝IMAP
IMAP提供IMAP及POP3兩種服務,它們的作用都是提供使用者收取信件的介面,這裡我們只使用IMAP服務。
我們假設所有要安裝的軟體都已經下載到/tmp。本文涉及的命令都以身份。
1.解壓,安裝:
# cd /tmp
# zxvf imap-2001a.tar.Z
# cd imap-2001a
# make slx

2.將生成的可執行檔案複製到/usr/sbin
#cp imapd/imapd /usr/sbin

3.在/ect/xinetd.d下新建檔案imap
#vi /etc/xinetd.d/imap
內容為:
# IMAP server at Port 143
service imap
{
 disable = no
 socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
}

4.重啟xinetd
/ect/rc.d/init.d/xinetd restart

5.測試imap服務起來沒有
# localhost 143
如果看到歡迎資訊,則說明IMAP伺服器安裝成功。注意,先不要刪除IMAP的安裝檔案,我們在後面還會用到。

六. 安裝Web mail支援——Apache、Mysql和PHP
這一步,我們要為Imp建立Web伺服器及資料庫支援。
1. 安裝MySql
Web mail Imp將使用者設定和通訊錄儲存在資料庫中,我們選用常用的MySql。
1.1解壓,配置編譯、安裝:
# cd /tmp
# tar zxvf mysql-3.23.47.tar.gz
# cd mysql-3.23.47
# ./configure --prefix=/usr/local/mysql
# make
# make install
完成後MySql被安裝到/usr/local/mysql。
1.2建立使用者mysql及組mysql
#groupadd mysql
#useradd mysql
#passwd mysql
1.3把MySql啟動起來:
#cd /usr/local/mysql/bin
# ./mysql_install_ (安裝MySql的基本資料庫)
# ./safe_mysqld –uroot & (啟動MySql並轉入後臺)
1.4測試MySql
# ./mysql
如果能連線資料庫,則MySql安裝完成。請注意修改MySql的root密碼,以增加性。其它操作請參照有關資料。
2. 安裝Apache、PHP及PEAR
Horde及Imp 是以PHP編寫的,要使它能夠執行,必須提供Web服務和PHP指令碼語言支援,而PEAR是PHP的功能擴充套件模組,雖然PHP預設安裝時已經安裝了PEAR,但Horde需要較新的版本。
2.1解壓:
# cd /tmp
# tar zxvf apache-1.3.24.tar.gz
# tar zxvf php-4.2.1.tar.gz
2.2預編譯Apache
# cd apache-1.3.24
# ./configure
2.3配置、編譯、安裝PHP,根據imp的需要,加上相應的引數,可參照相關資料進行修改
# cd ../php-4.2.1
# ./configure --with-mysql=/usr/local/mysql --with-apache=../apache-1.3.24 --with-imap=../imap2001a --with-gettext --with-
# make
# make install

2.4配置、編譯、安裝Apache
# cd ../apache-1.3.24
# ./configure -- prefix=/usr/local/apache --activate-module=src/modules//libphp4.a

2.5複製PHP配置檔案到/usr/local/lib
# cd ../php-4.2.1
# cp php.ini-recommended /usr/local/lib

2.6用新版本的PEAR替換舊版本
# cd /usr/local/lib
# mv php php.bak
# cp /tmp/ pear-4.1.0.tar.gz .
# tar zxvf pear-4.1.0.tar.gz
# mv pear-4.1.0 php
# chown root.root –R php

2.7針對PHP修改Apaceh配置檔案/usr/local/apache/conf/http.conf
找到如下兩行:
# AddType application/x-httpd-php .php
# AddType application/x-httpd-php-source .phps
將註釋符去掉,這兩行的作用是定義php文件的字尾。
還要修改預設的首頁型別,找到:
DirectoryIndex index.htm
改成:
DirectoryIndex index.htm index.php default.htm default.php

2.8啟動Apache
# /usr/local/apache/bin/apachectl start

2.9測試Apache和PHP
刪除/usr/local/apache/htdocs/下所有檔案
# cd /usr/local/apache/htdocs/
# –rf *
新建檔案test.php,內容為:
phpinfo(); ?>
找一臺能上網的機器,在位址列中輸入:,如果能看到PHP的有關資訊,則說明Apache及PHP安裝成功。
七. 安裝Web mail
Imp 是釋出的。它是以PHP編寫的一個功能完善的Web介面的郵件客戶端程式。它用IMAP或POP3連線郵件伺服器,完成郵件系統的各種功能。更值得一提的是它支援多種語言介面,包括簡體中文。
Horde是釋出的Horde Application (應用程式框架),所釋出的所有程式都要以Horde為基礎,Imp也不例外。我們首先安裝Horde。
1. 安裝Horde
1.1複製Horde包到Web伺服器的根目錄並解壓
# cd /usr/local/apache/htdocs
# cp /tmp/horde-2.1.tar.gz .
# tar zxvf horde-2.1.tar.gz
# mv horde-2.1 horde

應用補丁:
# cd horde
# cp /tmp/patch-horde-2.0-2.1.gz .
# gunzpatch-horde-2.0-2.1.gz
# patch –p1 1.2為Horde 和Imp準備資料庫
確定MySql在執行,我們將在MySql中建立Horde和Imp所需的資料庫。利用Horde中一個SQL指令碼檔案自動完成這項工作,在進行之前,要修改資料庫使用者的密碼。
# cd horde/scripts/db
# vi mysql_create.sql
找到如下內容:
REPLACE INTO user (host, user, pass)
 VALUES (
 'localhost',
 'horde',
 -- IMPORTANT: Change this password!
 password('horde') // 使用者密碼
 );
將斜體部分的內容改成自己的密碼,這裡假設被改成“xxx”。
建立資料庫:
# /usr/local/mysql/bin/mysql < mysql_create.sql
注:如果你為Mysql的root設定了密碼,則在上述命令中就要提供密碼。
如果成功,則在MySql中建立了名為horde的資料庫,此資料庫的所有者是horde,密碼是“xxx”。
用下面的命令測試資料庫是否成功建立:
# mysql -h localhost -u horde -pxxx
mysql>exit
1.3設定Horde
Horde和Imp的設定儲存在它們的配置檔案中。
複製配置檔案:
# cd horde/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done
編輯下列檔案:
1.3.1 Horde的設定檔案horde.php
// 以IMAP作為登入
$conf['auth'][''] = 'imap';
$conf['auth']['params'] = array();
$conf['auth']['params']['dsn'] = '{localhost/imap:143}INBOX';

// 使用MySql儲存使用者資料
$conf['prefs']['driver'] = 'sql';
$conf['prefs']['params'] = array();
$conf['prefs']['params']['phptype'] = 'mysql';
$conf['prefs']['params']['hostspec'] = 'localhost'; // 資料庫伺服器
$conf['prefs']['params']['username'] = 'horde'; // 資料庫使用者
$conf['prefs']['params']['password'] = 'xxx'; // 建立資料庫時設定的密碼
$conf['prefs']['params']['database'] = 'horde'; // 資料庫
$conf['prefs']['params']['table'] = 'horde_prefs'; // 表

// 使用Sendmail傳送郵件
$conf['mailer']['type'] = 'sendmail';

1.3.2 語言設定檔案lang.php
$nls['defaults']['language'] = 'zh_CN'; // 預設語言設成簡體中文

1.4 測試Horde
找一臺能上網的機器,在瀏覽器位址列中輸入:,如果正常的話,將會看到 Horde的相關資訊,如果發現錯誤,請檢查前面的操作。特別注意當重新整理此頁面時,session測試部分的值應該會自動加1,如果沒有,說明Apache或Horde的session設定不正確,這將導致不能登入到Web mail系統。
2. 安裝Imp
2.1複製Imp壓縮包到horde目錄下,解壓:
# cd /usr/local/apache/htdocs/horde/
# cp /tmp/imp-3.1.tar.gz .
# tar zxvf imp-3.1.tar.gz
# mv imp-3.1 imp

應用補丁
# cd imp
# cp /tmp/patch-imp-3.0-3.1.gz .
# gunpatch-imp-3.0-3.1.gz
# patch –p1 < patch-imp-3.0-3.1 -t

2.2 為Imp設定Horde,使Imp執行於Horde之下。
編輯Horde配置檔案horde/config/registry.php
// 取消下列行的註釋
$this->registry['auth']['login'] = 'imp'; // 以Imp作為登入和退出的介面
$this->registry['auth']['logout'] = 'imp';

//取消下列行的註釋並做修改,這是在Horde中註冊Imp
$this->applications['imp'] = array(
 'fileroot' => dirname(__FILE__) . '/../imp',
 'webroot' => $this->applications['horde']['webroot'] . '/imp',
 'icon' => '/horde/imp/graphics/imp.gif',
 'name' => _("返回郵件"), // 出現在連結上文字
 'allow_guests' => false,
 'show' => true
);

2.3 設定Imp配置檔案
# cd horde/imp/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done

編輯下列檔案:
2.3.1 連線伺服器配置檔案servers.php
// 修改下列行
$servers['imap'] = array(
 'name' => 'IMAP Server',
 'server' => 'localhost', // IMAP伺服器地址
 'protocol' => 'imap', // 協議
 'port' => 143, // 埠
 'folders' => 'mail/', // 資料夾
 'namespace' => '',
 'mailain' => 'example.com', // 域名
 'smtphost' => 'mail.example.com', // 郵件伺服器
 'realm' => '',
 'preferred' => 'true'
);
 
2.3.2 使用者配置檔案pref.php,設定使用者的預設設定
//以下設定供參考,可根據自己的情況修改
// 使用者使用的語言
$_prefs['language'] = array(
 'value' => 'zh_CN', // 預設的語言為簡體中文
 'locked' => false, // 是否允許使用者修改預設值,false為允許
 'shared' => true,
 'type' => '',
 'desc' => _("Select your preferred language:")
);

// 使用者資料夾設定,這些資料夾將建立在使用者目錄下
$_prefs['folders'] = array(
 'value' => 'mail/',
 'locked' => true,
 'shared' => false,
 'type' => 'text',
 'desc' => _("Path to your mail folders:")
);

// 收件夾,這不能修改
$_prefs['mailbox'] = array(
 'value' => 'INBOX',
 'locked' => true,
 'shared' => false,
 'type' => 'implicit'
);

// 發件夾
$_prefs['sent_mail_folder'] = array(
 'value' => 'Sent',
 'locked' => false,
 'shared' => true,
 'type' => 'implicit'
);

// 垃圾箱
$_prefs['trash_folder'] = array(
 'value' => 'Trash',
 'locked' => false,
 'shared' => false,
 'type' => 'implicit'
);
 
以上設定為基本設定,其它設定可根據實際情況修改
3. 測試Imp
找一臺能上網的機器,在瀏覽器位址列中輸入:,以系統使用者登入,試著傳送郵件給其它伺服器,給本伺服器的其它使用者,從其它伺服器傳送郵件到本伺服器等。如果有問題,檢視前面的步驟,確定問題所在。
八. 安裝通訊錄模組
通訊錄的功能由horde釋出的另一個軟體Turba來完成,在Horde的統一管理下,它能與Imp很好的結合成一個整體。
1.複製Turba到horde目錄並解壓:
# cd /usr/local/apache/htdocs/horde
# cp /tmp/turba-1.1.tar.gz .
# tar zxvf turba-1.1.tar.gz
# mv turba-1.1 turba
應用補丁
# cd turba
# cp /tmp/patch-turba-1.0-1.1.gz .
# gunzip patch-turba-1.0-1.1.gz
# patch –p1 < patch-turba-1.0-1.1 -t
2.為Turba設定Horde和Imp,使Turba執行在Horde之下
2.1在Horde中註冊Turba ,編輯檔案horde/config/registry.php
// 取消下列行的註釋並修改,這是Horde中註冊Turba
$this->applications['turba'] = array(
 'fileroot' => dirname(__FILE__) . '/../turba',
 'webroot' => $this->applications['horde']['webroot'] . '/turba',
 'icon' => '/horde/turba/graphics/turba.gif',
 'name' => _("通訊錄"), // 出現在連結中的文字
 'allow_guests' => false,
 'show' => true
);
 
2.2 在Imp中連結Turba,編輯檔案horde/imp/config/conf.php
$conf['menu']['apps'] = array('turba');
 
3.配置Turba
# cd horde/turba/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done

3.1編輯檔案horde/turba/config/conf.php,在Turba中連結Imp
$conf['menu']['apps'] = array('imp');
 
3.2編輯檔案horde/turba/config/prefs.php
// 設定Turba的語言
$_prefs['language'] = array(
 'value' => 'zh_CN', // 簡體中文
 'locked' => true,
 'shared' => true,
 'type' => 'select',
 'desc' => _("Select your preferred language:")
);
 
3.3 為Turba準備資料庫,利用Turba提供的SQL指令碼自動完成
# cd /horde/turba/scripts/drivers/
# /usr/local/mysql/bin/mysql < turba.sql

3.4 設定Turba使用MySQL儲存通訊錄資料
編輯檔案horde/turba/config/sources.php
// 修改下列行
$cfgSources['localsql'] = array(
 'title' => 'IMP Address Book',
 'type' => 'sql',
 'params' => array(
 'phptype' => 'mysql',
 'hostspec' => 'localhost', // 資料庫伺服器
 'username' => 'horde', // 使用者名稱
 'password' => 'xxx', // 前面設定的密碼
 'database' => 'horde', // 資料庫
 'options' => '',
 'tty' => '',
 'port' => '5432',
 'protocol' => '',
 'table' => 'turba_s' // 表
 ),

4.測試Turba
登入到Imp單擊“通訊錄”進入,測試增加、刪除聯絡人等是否正常。

九. 安裝修改密碼模組
修改密碼的功能由Horde的一個非官方的模組Passwd for Imp完成。它透過向poppassd服務提交請求來完成修改密碼的功能。
1. 安裝Poppassd
1.1安裝Poppassd
# cd /tmp
# tar zxvf poppassd-1.8.1.tar.gz
# cd poppassd-1.8.1
# make
# make install
1.2設定xinetd,建立檔案/etc/xinetd.d/poppassd
# default: off
# The POPPASSD port 106.
service poppassd
{
 disable = no
 socket_type = stream
 wait = no
 user = root
 server = /usr/sbin/poppassd
 log_on_success += USERID
 log_on_failure += USERID
}
重新啟動xinetd
# /etc/rc.d/init.d/xinetd restart
1.3測試poppassd
# telnet localhost 106
如果看到歡迎資訊,則poppassd成功安裝

2. 安裝Passwd for Imp
2.1複製Passwd for Imp到horde目錄
# cd /usr/local/apache/htdocs/horde/
# cp /tmp/passwd.tgz .
# tar zxvf passwd.tgz

2.2配置Horde和Imp使Passwd工作在Horde之下
編輯檔案horde/config/registry.php,增加以下內容:
// 在Horde中註冊passwd
$this->applications['passwd'] = array(
 'fileroot' => dirname(__FILE__) . '/../passwd',
 'webroot' => $this->applications['horde']['webroot'] . '/passwd',
 'icon' => $this->applications['horde']['webroot'] .
 '/passwd/graphics/lock.gif',
 'name' => _("修改密碼"), // 出現在連結上的文字
 'allow_guests' => false,
 'show' => true
);
 
在Imp中連結Passwd,編輯檔案horde/imp/config/conf.php
$conf['menu']['apps'] = array('turba', 'passwd');

2.3配置passwd
# cd horde/passwd/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done

編輯檔案horde/passwd/config/prefs.php
// 語言設定 事先要準備中文語言包
$_prefs['language'] = array(
 'value' => 'zh_CN',
 'locked' => false,
 'shared' => true,
 'type' => 'select',
 'desc' => _("Select your preferred language:")
);
 
//在Passwd中連結Imp
$conf['menu']['apps'] = array('imp');
3. 測試修改密碼功能
登入到Imp,進入修改密碼模組,看看能否正常修改密碼。
至此,一個郵件系統成功建立了。接下來的問題就是修改Horde Imp的配置檔案來完善她,如自定義起始頁,加上本公司標誌等。我的mail是zsz@yxyz.net.cn或zsz_mail@sina.com。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991642/,如需轉載,請註明出處,否則將追究法律責任。

相關文章