hordeimpWebmail的安装与设置详细分析

发表于:2007-07-04来源:作者:点击数: 标签:
一. 邮件系统的基本原理 首先让我们来了解一下电子邮件系统的基本原理。这里只做一个简单介绍,详细的可参考有关书籍。 一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理将用户的信件传送至传输代理(如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/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_suclearcase/" 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的配置文件来完善她,如自定义起始页,加上本公司标志等。

原文转自:http://www.ltesting.net