email已经成为互联网上最重要的服务之一。无论菜鸟或大虾,他可能没用过ftp,没上过bbs,没有自己的主页,但他一定有一个自己的电子邮箱。随着互联网的发展,电子邮箱收费已是大势所趋。虽然还有免费的存在,但网站们为了突出收费邮箱的“优势”,有意无意的降低了免费邮箱的服务标准,导致经常丢失信件。收费信箱是好,可是得出钱,而且还有容量限制,速度也不见得快。
园区网建起来后,如果能建设一个自己的邮件系统,向广大员工提供免费的、无空间限制、快速的电子邮箱,一定会大受欢迎。只要你有一台普通的pc,你就不需要花一分钱!因为我们采用的软件全部是open source(开放源代码)的,可免费获得。
更重要的是,这套系统可称得上是全功能的:可以实现一个流行的邮件系统所支持的几乎所有功能,包括发送附件、pop3或imap收信方式、用户文件夹管理、通讯录、修改密码等。如果你愿意,还可实现日历、记事本等功能。而这一切功能都可以通过web方式实现,即web mail。
怎么样,心动啦?那就随我来!内容较多,先把目录列出来:
【目录】
一.邮件系统的基本原理
二.需要的网络环境
三.安装操作系统
四.安装sendmail
五.安装imap
六.安装web mail支持——apache、mysql和php
七.安装web mail
八.安装通讯录模块
九.安装修改密码模块
一. 邮件系统的基本原理
首先让我们来了解一下电子邮件系统的基本原理。这里只做一个简单介绍,详细的可参考有关书籍。
一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理将用户的信件传送至传输代理(如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/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服务起来没有
#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,
— 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][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, // 邮件服务器
realm => ,
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_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。