一. 郵件系統的基本原理 首先讓我們來了解一下電子郵件系統的基本原理。這裡只做一個簡單介紹,詳細的可參考有關書籍。 一般情況下,我們把電子郵件程序分解成用戶代理,傳輸代理和投遞代理。 用戶代理將用戶的信件傳送至傳輸代理(如Outlook Express、FoxM
一. 郵件系統的基本原理 首先讓我們來了解一下電子郵件系統的基本原理。這裡只做一個簡單介紹,詳細的可參考有關書籍。
一般情況下,我們把電子郵件程序分解成用戶代理,傳輸代理和投遞代理。 用戶代理將用戶的信件傳送至傳輸代理(如Outlook Express、FoxMail等)。郵件傳輸代理負責將郵件送到目標主機(如sendmail)。而投遞代理則從信件傳輸代理取得信件傳送至最終用戶的郵箱(如procmail)。
我們來模擬一封郵件從發出到收到的過程。用戶使用Outlook Express(用戶代理或叫做郵件客戶端)向Sendmail(傳輸代理)請求發送電子郵件的服務,將郵件交給Sendmail。Sendmail根據郵件的目的地址,將郵件發送給郵件接收
服務器,郵件接收服務器將郵件緩存(這也是Sendmail的工作)。接收郵件的用戶用Outlook Express向郵件接收服務器發出取信的請求,郵件接收服務器將郵件發送給用戶(這是IMAP或POP服務的工作)。至此,一封郵件從發送者的機器到達接收者的機器。
我們要建立的郵件服務器,以
性能優越的RedHat Linux 7.3為操作系統。以Sendmail作郵件傳輸服務,IMAP作收信服務來構成郵件系統的基本框架。以Horde Imp作為郵件的Web客戶端。剩下的就是Horde Imp的支持軟件:以
MySQL存儲用戶數據,以Apache+PHP作為Web服務器。我們還使用其它的模塊來擴充本系統的功能:通訊錄模塊和修改密碼模塊。
我們將安裝下列軟件:
1. RedHat
linux7.3
作用:操作系統
下載地址: http://freesoft.online.sh.cn:8888/mirrors/redhat/7.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服務器
下載地址:http://freesoft.online.sh.cn:8888/mirrors/ftp.apache.org/httpd/apache_1.3.24.tar.gz
5. PHP-4.2.1
作用:CGI
腳本語言 下載地址:http://www.php.net/do_download.php?download_file=php-4.2.1.tar.gz
6. PEAR-4.1.0
作用:PHP的功能擴展模塊
下載地址:ftp://ftp.horde.org/pub/horde/tarballs/pear-4.1.0.tar.gz
7. MySql
作用:
數據庫,存儲郵件用戶數據和通訊錄
下載地址:http://freesoft.online.sh.cn:8888/mirrors/Database/MySQL/mysql-3.23.49.tar.gz
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方式修改用戶密碼的功能。
下載地址:http://echelon.pl/pubs/poppassd-1.8.2.tar.gz
12.Passwd for imp
作用:提供修改密碼功能的模塊
下載地址:https://mail.ph.utexas.edu/test2/patches/public/passwd/passwd.tgz
二. 需要的網絡環境 本文假設用戶希望在園區網中架設一個電子郵件服務器,為本單位用戶提供郵件服務。該服務器擁有一個合法的IP地址202.99.11.200和一個合法的域名mail.example.com,並且example.com的DNS的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.com
作用:定義郵件交換的域
原內容: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。本文涉及的命令都以root身份執行。
1.解壓,安裝:
# cd /tmp
# tar zxvf imap-2001a.tar.Z
# cd imap-2001a
# make slx
2.將生成的可執行文件拷貝到/usr/sbin
#cp imapd/imapd /usr/sbin
3.在/ect/xine
td.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服務起來沒有
#telnet 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_db (安裝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-xml
# make
# make install
2.4配置、編譯、安裝Apache
# cd ../apache-1.3.24
# ./configure -- prefix=/usr/local/apache --activate-module=src/modules/php4/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/
# rm –rf *
新建文件test.php,內容為:
<? phpinfo(); ?>
找一台能上網的機器,在浏覽器地址欄中輸入:http://mail.example.com/test.php,如果能看到PHP的有關信息,則說明Apache及PHP安裝成功。
七. 安裝Web mail Imp 是http://horde.org/發布的。它是以PHP編寫的一個功能完善的Web界面的郵件客戶端程序。它用IMAP或POP3協議連接郵件服務器,完成郵件系統的各種功能。更值得一提的是它支持多種語言界面,包括簡體中文。
Horde是http://horde.org/發布的Horde Application Framework(應用程序框架),http://horde.org/所發布的所有程序都要以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 .
# gunzip patch-horde-2.0-2.1.gz
# patch –p1 <patch-horde-2.0-2.1 -t
1.2為Horde 和Imp准備數據庫
確定MySql在運行,我們將在MySql中建立Horde和Imp所需的數據庫。利用Horde中一個SQL腳本文件自動完成這項工作,在進行之前,要修改數據庫用戶的密碼。
# cd horde/scripts/db
# vi mysql_create.sql
找到如下內容:
REPLACE INTO user (host, user, password)
VALUES (
'localhost',
'horde',
-- IMPORT
ANT: 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']['driver'] = '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
找一台能上網的機器,在浏覽器地址欄中輸入:http://mail.example.com/horde/test.php,如果正常的話,將會看到 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 .
# gunzip patch-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' => ',
'maildomain' => 'example.com', // 域名
'smtphost' => 'mail.example.com', // 郵件服務器
're
alm' => ',
'preferred' => 'true'
);
2.3.2 用戶配置文件pref.php,設定用戶的默認設置
//以下設置供參考,可根據自己的情況修改
// 用戶使用的語言
$_prefs['language'] = array(
'value' => 'zh_CN', // 默認的語言為簡體中文
'locked' => false, // 是否允許用戶修改缺省值,false為允許
'shared' => true,
'type' => 'select',
'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
找一台能上網的機器,在浏覽器地址欄中輸入:http://mail.example.com/horde/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' => '
unix',
'table' => 'turba_objects' // 表
),
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_su
clearcase/" target="_blank" >ccess += 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的配置文件來完善她,如自定義起始頁,加上本公司標志等。