分享
 
 
 

CNGNUPostfix邮件系统系列指南之二0.21

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>Postfix + Courier-IMAP + Cyrus-SASL + MySQL + IMP完全指南</title><style type="text/css">

<!--

p,li { font-size: 12px; margin-top: 4px; margin-bottom: 4px}

td { font-family: "Courier New", "Courier", "mono"; font-size: 12px; font-weight: bold}

.type {color: #FF0000;}

-->

</style></head>

<body bgcolor="#ffffff" leftmargin="20">

<h2 align="left"><font face="Arial, Helvetica, sans-serif">CNGNU Postfix</font>邮件系统系列指南之<font face="Arial, Helvetica, sans-serif">二</font></h2>

<h1 align="center"><font face="Arial, Helvetica, sans-serif"><font color="#ff0000">P</font>ostfix

+ <font color="#ff0000">C</font>ourier-IMAP + <font color="#ff0000">C</font>yrus-SASL

+ <font color="#ff0000">M</font>ySQL + <font color="#ff0000">I</font>MP</font>

完全指南</h1>

<hr noshade="noshade" size="1">

<p> </p>

<blockquote>

<p>作者:王兴宇 <a href="mailto:wxy@cngnu.org"><wxy@cngnu.org></a> </p>

<p>版本:0.21</p>

<p>版权:GPL</p>

<p>发布日期:2004-02-04</p>

<p> </p>

<h3>目录</h3>

<p><a href="#a.1">1.  概述</a></p>

<p><a href="#a.1.1">1.1.  目的</a></p>

<p><a href="#a.1.2">1.2.  更新历史</a></p>

<p><a href="#a.1.3">1.3.  TODO</a></p>

<p><a href="#a.1.4">1.4.  鸣谢</a></p>

<p><a href="#a.2">2.  系统功能</a></p>

<p><a href="#a.3">3.  系统基本前提</a></p>

<p><a href="#a.4">4.  配置MySQL</a></p>

<p><a href="#a.4.1">4.1.  运行</a></p>

<p><a href="#a.4.2">4.2. 测试</a></p>

<p><a href="#a.4.3">4.3.  配置</a></p>

<p><a href="#a.5">5.  安装pam_mysql</a></p>

<p><a href="#a.5.1">5.1.  下载</a></p>

<p><a href="#a.5.2">5.2.  编译与安装</a></p>

<p><a href="#a.5.3">5.3.  配置</a></p>

<p><a href="#a.6">6.  安装Cyrus-SASL</a></p>

<p><a href="#a.6.1">6.1.  下载</a></p>

<p><a href="#a.6.2">6.2.  编译与安装</a></p>

<p><a href="#a.6.3">6.3.  配置</a></p>

<p><a href="#a.6.4">6.4. 运行</a></p>

<p><a href="#a.7">7.  安装Postfix</a></p>

<p><a href="#a.7.1">7.1.  下载</a></p>

<p><a href="#a.7.2">7.2.  编译与安装</a></p>

<p><a href="#a.7.3">7.3.  配置</a></p>

<p><a href="#a.7.4">7.4.  运行</a></p>

<p><a href="#a.7.5">7.5.  测试</a></p>

<p><a href="#a.8">8.  安装Cyrus-IMAP</a></p>

<p><a href="#a.8.1">8.1.  下载</a></p>

<p><a href="#a.8.2">8.2.  编译与安装</a></p>

<p><a href="#a.8.3">8.3.  配置</a></p>

<p><a href="#a.8.4">8.4.  运行</a></p>

<p><a href="#a.8.5">8.5.  测试</a></p>

<p><a href="#a.9">9.  安装IMP</a></p>

<p><a href="#a.9.1">9.1.  下载</a></p>

<p><a href="#a.9.2">9.2.  配置Apache/PHP</a></p>

<p><a href="#a.9.3">9.3.  配置Horde</a></p>

<p><a href="#a.9.4">9.4.  配置Imp</a></p>

<p><a href="#a.9.5">9.5.  配置Turba</a></p>

<p><a href="#a.9.6">9.6.  测试IMP</a></p>

<p><a href="#a.10">10.  其它</a></p>

<p><a href="#a.10.1">10.1.  启动脚本</a></p>

<p><a href="#a.10.2">10.2.  </a><a href="#a.10.3">整体测试</a></p>

<hr size="1">

<p> </p>

</blockquote>

<h1><a name="a.1" id="a.1"></a>1.  概述</h1>

<h2><a name="a.1.1"></a>1.1.  目的</h2>

<p>

本文试图介绍如何在一个Linux平台上安装一套功能完整的邮件系统。这里我们以Postfix做SMTP服务器、Courier-IMAP做

POP3/IMAP4服务器、通过Cyrus-SASL对存储在MySQL数据库中的用户进行验证和授权,并且使用IMP来提供一个完善的WEBMAIL

界面。</p>

<p>

这个邮件系统的设计目标是提供一个可扩充的、具备大多数功能的邮件系统。</p>

<p>

如果希望使用Cyrus-IMAP做为POP3/IMAP4服务器,可以参阅本文的姊妹篇:<a href="http://www.cngnu.org/technology/Postfix_I.html">http://www.cngnu.org/technology/Postfix_I.html</a>。</p>

<p>

本文的最新版本可以在这里找到:<a href="http://www.cngnu.org/technology/Postfix_II.html">http://www.cngnu.org/technology/Postfix_II.html</a></p>

<p>

有关本文所涉及的技术问题,请到<a href="http://www.anti-spam.org.cn/forums/">http://www.anti-spam.org.cn/forums/</a>的mail版讨论,我会尽快回复的,请勿就技术问题给我发邮件。</p>

<p>

本文的版权遵循GPL,可以在不删除版权信息和注明修改的情况下任意传播。</p>

<h2><a name="a.1.2"></a>1.2.  更新历史</h2>

<ul>

<li>2004-01-29 第一次发布,版本0.20。</li>

<li>2004-02-04 修正了一些笔误。</li>

</ul>

<h2><a name="a.1.3"></a>1.3.  TODO </h2>

<ul>

<li>增加邮件列表功能</li>

<li>增加SSL部分的内容</li>

<li>翻译:希望有能力的朋友可以翻译这篇文章为英文,这样国外的朋友也可以看到</li>

</ul>

<h2><a name="a.1.4"></a>1.4.  鸣谢</h2>

<p>  </p>

<h1><a name="a.2"></a>2.  系统功能</h1>

<p>

系统逻辑结构:</p>

<pre><font face="Courier New, Courier, mono" size="2">

+--------------------------------------------------------------+

| |

| 25/25 25/25 110/993 143/995 80/443 |

| Incoming Outgoing POP3 IMAP WEB-MAIL |

| /\ /\ /\ /\ /\ |

| || || || || || |

| \/ \/ \/ \/ \/ |

+---------------------------------+----------------+-----------+

| Postfix | | IMP |

| +------------------+ +-----------+

| | Cyrus-SASL | Courier-IMAP |

+----------+ +------------------+--------------+ |

| MailDrop | |authdaemond.mysql |(authmysqlrc) | |

+----------+---+------------------+--------------+-------------+

| MailDir/ | MySQL | MailDir/ |

+----------+-------------------------------------+-------------+</font></pre>

<p>

整个系统对外的界面包括几个部分,用来发信的SMTP、用来收信的POP3和IMAP、以及一个WEB界面的邮件使用系统。这里没有提供WEB界面的管理工具,需要大家自行依据实际需要开发。如果需要商业应用,可以购买CEM产品(<a href="http://cngnu.net/products/cem/">http://cngnu.net/products/cem/</a>),其中包括了完善的管理界面和优化的邮件服务器环境。</p>

<p>

MySQL作为系统中存储数据的核心,它存储了用户的信息。这个信息不但用于POP3/IMAP和SMTP AUTH的认证需要,而且也为Postfix提供了本地接收者列表、邮件转发功能和过滤功能开关。</p>

<p>

认证分为两种类型,Postfix中的发信认证是通过SASL对MySQL进行查询进行的;Courier-IMAP的收信认证是通过Courier-IMAP的MySQL支持进行的。</p>

<p>

用户的信件是存储在标准的(Qmail格式)MailDir/中的。Postfix接收到信件后通过MailDrop投递到用户的MailDir/中。Courier-IMAP通过认证后访问MailDir/来读取信件。</p>

<h1><a name="a.3"></a>3.  系统基本前提</h1>

<p>

本文以Linux系统为目标平台,支持多数的Linux平台如RedHat 7.x/8.x/9.x/AS2.1/AS3、Mandrake 8.x/9.x等,理论上也会支持其他的Linux发行版,甚至其他的UNIX系统。</p>

<p>

这里以RedHat Linux Advance Server Enterprise V 3.0 (以下简称AS3)为说明平台。我采用了最基本的AS3安装,只选择了“Web

Server”、“Dns Name Server”、“MySQL Database Server”、“Development Tools”和“Kernel

Development”等软件包组(“Core”和“Base”组是默认必选的软件包)。</p>

<p>

除此外,还需要额外安装以下RPM:</p>

<p>

1、php-mysql-4.3.2-8.ent.i386.rpm(在CD3)</p>

<h1><a name="a.4"></a>4.  安装MySQL</h1>

<h2><a name="a.4.1" id="a.4.1"></a>4.1.  下载</h2>

<p>

AS3默认是只包含MySQL除了服务器程序外的部分的,所以需要从RPMFIND下载MySQL的源RPM重建(最好使用源码包,采用MySQL.com提供的RPM和BIN包都可能在其它使用mysql的部分编译时候出现错误)。</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]# <span class="type">cd /usr/src</span></p>

<p>[root@mail src]# <span class="type">wget <a href="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/mysql-3.23.58-1.src.rpm</a></span></p></td>

</tr>

</tbody></table>

<h2><a name="a.4.2" id="a.4.2"></a>4.2.  编译与安装</h2>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail src]# <span class="type">rpmbuild --rebuild mysql-3.23.58-1.src.rpm </span></p>

<p>[root@mail src]# <span class="type">cd redhat/RPMS/i386</span></p>

<p>[root@mail i386]# <span class="type">rpm -ivh mysql-server-3.23.58-1.i386.rpm</span></p></td>

</tr>

</tbody></table>

<p>

为提高MySQL的安全性,使之只监听在本地打环端口,修改/etc/my.cnf:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail i386]# <span class="type">cd</span></p>

<p>[root@mail root]# <span class="type">vi /etc/my.cnf </span></p></td>

</tr>

</tbody></table>

<p>

在[mysqld]小节里面添加:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">bind-address=127.0.0.1</td>

</tr>

</tbody></table>

<p>

并设置其开机时候自动运行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]# <span class="type">chkconfig --level 0123456 mysqld

on </span></p></td>

</tr>

</tbody></table>

<p></p>

<h2><a name="a.4.3" id="a.4.3"></a>4.3.  运行</h2>

<p>

启动命令如下:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail i386]# <span class="type">/etc/init.d/mysqld start</span></p></td>

</tr>

</tbody></table>

<h2><a name="a.4.4" id="a.4.4"></a>4.4.  测试</h2>

<p>

启动MySQL后,首先检查日志/var/log/messages有无错误信息,然后检查进程,应该有如下进程存在:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]# <span class="type">pstree | grep mysqld</span></p>

<p> </p>

<p>|-safe_mysqld---mysqld</p>

<p> </p></td>

</tr>

</tbody></table>

<p>

接着检查端口,应该有如下端口打开:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]#<font color="#ff0000"> </font><span class="type">netstat

-an | grep LISTEN</span></p>

<p> </p>

<p>tcp

0

0 127.0.0.1:3306

0.0.0.0:*

LISTEN

</p></td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.4.1"></a>4.5.  建立数据库</h2>

<p>

MySQL安装配置好以后,创建如下SQL脚本mail.sql:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>CREATE DATABASE mail;</p>

<p>GRANT ALL ON mail.* TO mail@localhost</p>

<p>IDENTIFIED BY "secret";</p>

<p>FLUSH PRIVILEGES;</p>

<p> </p>

<p>USE mail;</p>

<p>CREATE TABLE USER (

ID int(10) unsigned NOT NULL auto_increment,

USERNAME varchar(128) NOT NULL default '',

PASSWORD varchar(40) NOT NULL default '',

CLEAR_PASSWORD varchar(40) NOT NULL default '',

FORWARD varchar(128) NOT NULL default '',

DOMAIN varchar(64) NOT NULL default '',

HOMEDIR varchar(128) NOT NULL default '',

MAILDIR varchar(128) NOT NULL default '',

MAIL varchar(64) NOT NULL default '',

GID int(11) NOT NULL default 450,

UID int(11) NOT NULL default 450,

FILTER varchar(64) NOT NULL default 'OK',

QUOTA int(11) NOT NULL default '10485760',

STATUS tinyint(4) NOT NULL default '1',

PRIMARY KEY (ID),

UNIQUE KEY USERNAME (USERNAME),

UNIQUE KEY MAIL (MAIL)

) TYPE=MyISAM;</p>

<p> </p>

<p>INSERT INTO USER (USERNAME,PASSWORD,CLEAR_PASSWORD,

FORWARD,DOMAIN,HOMEDIR,MAILDIR,MAIL)</p>

<p>VALUES ('trueuser','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/','testpw',</p>

<p>'trueuser','cngnu.org','/data/mail/trueuser','/data/mail/trueuser/Maildir',</p>

<p>'trueuser@cngnu.org'),

('virtualuser@cngnu.org','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/','testpw',</p>

<p>'virtualuser@cngnu.org','cngnu.org','/data/mail/cngnu.org/virtualuser',

'/data/mail/cngnu.org/virtualuser/Maildir','virtualuser@cngnu.org');</p>

<p></p></td>

</tr>

</tbody></table>

<p> </p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]# <span class="type">mysql < mail.sql</span></p></td>

</tr>

</tbody></table>

<p>

在MySQL中创建邮件用户数据库,并添加两个测试邮箱:</p>

<ul>

<li>非虚拟域邮箱“trueuser”,密码是“testpw”</li>

<li>虚拟域邮箱“virtualuser@cngnu.org”,密码是“testpw”</li>

</ul>

<p>

上面的mail数据库的USER表用来保存用户信息:</p>

<ul>

<li>USERNAME是用户名。USERNAME不但作为认证的字段,而且是本地邮箱查找条件(见下面的Postfix的virtual.mysql)。这里采用了加密密码是为了更好的安全性。对于

<ul>

<li>非虚拟域邮箱:USERNAME字段是邮件的本地部分(“@”前面的部分)</li>

<li>虚拟域邮箱:USERNAME字段是邮件地址全称</li>

</ul>

</li>

<li>PASSWORD

字段是邮箱的MD5-Crypt密码,CLEAR_PASSWORD是明文密码。邮箱的密码是“testpw”,加密后的(MD5-CRYPT)密文是

“$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/”(可以通过系统的passwd命令来添加一个用户,生成密码,然后从

/etc/shadow中复制。)。保存两个密码是由于Cyrus-SASL的mysql认证方式不支持加密的密码,而Courier-IMAP的

mysql认证却使用加密的密码。</li>

<li>FORWARD字段默认情况下与USERNAME一样,在此情况下,邮件递交到本地邮箱(由

于Postfix区分邮箱的大小写,所以通过这样的一个转发,正好可以消除大小写的区别);如果FORWARD字段是另外一个用户名或者邮件地址,则该邮

件被转发到别的用户或其它邮件地址。</li>

<li>DOMAIN字段用来快速找出某个域下存在的邮箱,仅为管理方便使用。</li>

<li>MAILDIR字段用来给MailDrop指出邮件投递那里,HOMEDIR字段是邮件用户的主目录,通常指向一个任意存在的公共位置,不过可以使每个用户都拥有自己的主目录,在其中可以放入maildrop的过滤规则来实现用户级别的过滤。</li>

<li>MAIL

字段是邮件地址全称。对于非虚拟域邮箱,它包含了本地部分外的域部分;对于虚拟域邮箱,它和USERNAME字段一样。一方面是为了管理方便使用,同时该

字段还用来做maildrop递交和全局过滤控制FILTER的查找条件(见FILTER字段及下面Postfix的filter.mysql)。</li>

<li>GID字段和UID字段是系统使用的投递用户ID,即MailDrop的运行身份(在Postfix的master.cf指定)。</li>

<li>FILTER字段用于控制该邮箱是否接受服务器的全局邮件过滤。该值设置为“OK”或为空表示对该邮箱不进行过滤;设置为“DUNNO”表示对该邮箱进行Postfix中定于的全局过滤。该值可以是任何合法的Postfix的access过滤规则。</li>

<li>PARTITION字段用于指明邮箱存储的Cyrus-IMAP邮件分区。可以建立多个不同的邮件分区。仅为了管理方便使用。</li>

<li>QUOTA字段指定邮箱的磁盘限额。仅为了管理方便使用。</li>

<li>STATUS字段用来指示该用户是否有效,可以通过修改该值为0来临时禁止某个用户。</li>

</ul>

<h1><a name="a.5" id="a.5"></a>5.  安装Cyrus-SASL</h1>

<h2><a name="a.5.1" id="a.5.1"></a>5.1.  下载</h2>

<p>

目前多数版本的LINUX中都已经内置了Cyrus-SASL,但是并不符合我们的需要,所以我们需要从rpmfind.net下载Cyrus-SASL的源RPM修改后重建并更新系统的Cyrus-SASL:</p>

<p></p>

<p>

<a href="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm</a></p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]# <span class="type">cd /usr/src</span></p>

<p>[root@mail src]# <span class="type">wget <a href="ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm">ftp://rpmfind.net/linux/redhat/enterprise/3/en/os/i386/SRPMS/cyrus-sasl-2.1.15-3.src.rpm</a></span></p></td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.5.2" id="a.5.2"></a>5.2.  编译与安装</h2>

<p>

安装Cyrus-sasl源RPM:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail src]# <span class="type">rpm -ivh cyrus-sasl-2.1.15-3.src.rpm</span></p></td>

</tr>

</tbody></table>

<p>

应用以下补丁文件cyrus-sasl.spec.patch:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">*** cyrus-sasl.spec 2003-08-22 03:22:37.000000000 +0800

--- /root/cyrus-sasl.spec 2004-01-16 12:56:30.000000000 +0800

***************

*** 5,11 ****

Summary: The Cyrus SASL library.

Name: cyrus-sasl

Version: 2.1.15

<span class="type">! Release: 3</span>

License: Freely Distributable

Group: System Environment/Libraries

Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-%{version}.tar.gz

--- 5,11 ----

Summary: The Cyrus SASL library.

Name: cyrus-sasl

Version: 2.1.15

<span class="type">! Release: 3m</span>

License: Freely Distributable

Group: System Environment/Libraries

Source0: ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-%{version}.tar.gz

***************

*** 73,78 ****

--- 73,87 ----

The %{name}-md5 package contains the Cyrus SASL plugins which support

CRAM-MD5 and DIGEST-MD5 authentication schemes.

<span class="type">+ %package mysql

+ Requires: %{name} = %{version}-%{release}

+ Group: System Environment/Libraries

+ Summary: Mysql support for Cyrus SASL.

+

+ %description mysql

+ The %{name}-mysql package contains the Cyrus SASL plugins which support

+ Mysql auxprop authentication schemes.

+ </span>

%prep

%setup -q -c -a 2

pushd cyrus-sasl-%{cs1_version}

***************

*** 167,173 ****

--enable-cram --enable-digest --enable-plain <span class="type">! --enable-login</span>

# --enable-auth-sasldb -- EXPERIMENTAL

make sasldir=%{_plugindir2}

popd

--- 176,183 ----

--enable-cram --enable-digest --enable-plain <span class="type">! --enable-login ! --with-mysql</span>

# --enable-auth-sasldb -- EXPERIMENTAL

make sasldir=%{_plugindir2}

popd

***************

*** 273,278 ****

--- 283,293 ----

%{_plugindir2}/*digestmd5*.so*

%{_plugindir2}/*digestmd5*.la

<span class="type">+ %files mysql

+ %defattr(-,root,root)

+ %{_plugindir2}/*mysql*.so*

+ %{_plugindir2}/*mysql*.la

+ </span>

%files gssapi

%defattr(-,root,root)

%{_plugindir}/*gssapi*.so*

***************

*** 300,305 ****

--- 315,321 ----

%{_plugindir2}/*anonymous*.a

%{_plugindir2}/*crammd5*.a

%{_plugindir2}/*digestmd5*.a

<span class="type">+ %{_plugindir2}/*mysql*.a</span>

%{_plugindir2}/*gssapi*.a

%{_plugindir2}/*login*.a

%{_plugindir2}/*plain*.a</td>

</tr>

</tbody></table>

<p>

这个补丁主要对原有的Cyrus-SASL库添加了对MySQL认识的支持。</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail src]# <span class="type">cd redhat/SPECS</span></p>

<p>[root@mail SPECS]# <span class="type">patch -p0 < ../../cyrus-sasl.spec.patch </span></p></td>

</tr>

</tbody></table>

<p></p>

<p>

如果没有出现错误,然后重建RPM:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail SPECS]# <span class="type">rpmbuild -bb cyrus-sasl.spec </span></p></td>

</tr>

</tbody></table>

<p>

重建完成后更新系统的Cyrus-SASL:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail SPECS]# <span class="type">cd ../RPMS/i386</span></p>

<p>[root@mail i386]# <span class="type">rm -rf cyrus-sasl-debuginfo*.rpm</span></p>

<p>[root@mail i386]# <span class="type">rpm -Uvh cyrus-sasl*.rpm</span></p></td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.5.3" id="a.5.3"></a>5.3.  配置</h2>

<p>

设置Postfix使用SASL的mysql扩展认证来支持smtp auth认证:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail i386]#<span class="type"> vi /usr/lib/sasl2/smtpd.conf</span></p> </td>

</tr>

</tbody></table>

<p>

内容如下:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">pwcheck_method: auxprop

mech_list: plain login

mysql_user: mail

mysql_passwd: secret

mysql_hostname: localhost

mysql_database: mail

mysql_statement: select CLEAR_PASSWORD from USER where (USERNAME = '%u'

or MAIL = '%u@%r') limit 1 </td>

</tr>

</tbody></table>

<p>

对于cyrus-sasl-2.1.17版本的sasl,其对mysql、postgresql等数据库的支持已经合并为一个sql扩展,具体的配置语句略有不同。</p>

<p>

整个系统只有Postfix的smtp auth使用了SASL认证。Courier-IMAP的认证使用了它自己的mysql扩展。</p>

<h1><a name="a.6"></a>6.  安装Maildrop</h1>

<h2><a name="a.6.1" id="a.6.1"></a>6.1.  下载</h2>

<p>

<a href="http://sourceforge.net/projects/courier/">http://sourceforge.net/projects/courier/</a></p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail i386]# <span class="type">cd /usr/src</span></p>

<p>[root@mail src]# <span class="type">wget </span><a href="http://heanet.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2">http://heanet.dl.sourceforge.net/sourceforge/courier/maildrop-1.6.3.tar.bz2 </a> </p></td>

</tr>

</tbody></table>

<h2><a name="a.6.2" id="a.6.2"></a>6.2.  编译与安装</h2>

<p>

先添加用户maildrop,其UID和GID是mysql数据库字段UID和GID的值:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail src]# <span class="type">groupadd -g 450 maildrop</span></p>

<p>[root@mail src]# <span class="type">useradd -g 450 -u 450 -c maildrop

-M -d/data/mail -s/no/shell maildrop</span></p>

</td>

</tr>

</tbody></table>

<p>

编译maildrop,并增加mysql支持和限额支持:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail src]# <span class="type">tar -xvjf maildrop-1.6.3.tar.bz2 </span></p>

<p>[root@mail src]# <span class="type">cd maildrop-1.6.3 </span></p>

<p> </p>

<p>[root@mail maildrop-1.6.3]# <span class="type">./configure \</span></p>

<p>> <span class="type">--without-db --enable-sendmail=/usr/sbin/sendmail

\</span></p>

<p>> <span class="type">--enable-trusted-users='root maildrop' \</span></p>

<p>> <span class="type">--enable-maildropmysql --with-mysqlconfig=/etc/maildrop.mysql \</span></p>

<p>> <span class="type">--enable-maildirquota --with-trashquota </span><span class="type">--with-dirsync</span></p>

<p>[root@mail maildrop-1.6.3]# <span class="type">make</span></p>

<p>[root@mail maildrop-1.6.3]# <span class="type">make install-strip </span></p>

<p>[root@mail maildrop-1.6.3]# <span class="type">make install-man</span></p>

<p>[root@mail maildrop-1.6.3]# <span class="type">cp maildropmysql.config

/etc/maildrop.mysql </span></p></td>

</tr>

</tbody></table>

<h2><a name="a.6.3" id="a.6.3"></a>6.3.  配置</h2>

<p>

然后编辑配置文件/etc/maildrop.mysql:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail maildrop-1.6.3]# <span class="type">vi /etc/maildrop.mysql</span></p> </td>

</tr>

</tbody></table>

<p>

内容如下</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc"><p>hostname localhost

port 3306

socket /var/lib/mysql/mysql.sock

database mail

dbuser mail

dbpw secret

dbtable USER

default_uidnumber 450

default_gidnumner 450

uid_field MAIL

uidnumber_field UID

gidnumber_field GID

maildir_field MAILDIR

homedirectory_field HOMEDIR

quota_field QUOTA

mailstatus_field STATUS

where_clause

""

</p> </td>

</tr>

</tbody></table>

<p> </p>

<h1><a name="a.7"></a>7.  安装Postfix</h1>

<h2><a name="a.7.1"></a>7.1.  下载</h2>

<p>

<a href="http://www.postfix.org/ftp-sites.html" target="_top">http://www.postfix.org/ftp-sites.html</a></p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail maildrop-1.6.3]# <span class="type">cd /usr/src</span></p>

<p>[root@mail src]# <span class="type">wget <a href="http://postfix.energybeam.com/source/official/postfix-2.0.16.tar.gz">http://postfix.energybeam.com/source/official/postfix-2.0.16.tar.gz</a>

</span> </p></td>

</tr>

</tbody></table>

<h2><a name="a.7.2"></a>7.2.  编译与安装</h2>

<p>

如果你的系统上原来有sendmail,先将其停止并将其文件改名:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail src]# <span class="type">/etc/init.d/sendmail stop</span></p>

<p>[root@mail src]# <span class="type">chkconfig --level 0123456 sendmail

off</span>

[root@mail src]# <span class="type">mv /usr/bin/newaliases /usr/bin/newaliases.orig</span></p>

<p>[root@mail src]# <span class="type">mv /usr/bin/mailq /usr/bin/mailq.orig</span></p>

<p>[root@mail src]# <span class="type">mv /usr/sbin/sendmail /usr/sbin/sendmail.orig</span></p>

</td>

</tr>

</tbody></table>

<p> </p>

<p>

然后添加两个组:postfix和maildrop和一个用户:postfix</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail src]# <span class="type">groupadd -g 400 postfix</span></p>

<p>[root@mail src]# <span class="type">groupadd -g 401 postdrop</span></p>

<p>[root@mail src]# <span class="type">useradd -u 400 -g 400 -c postfix

-M -d/no/where -s/no/shell postfix</span></p>

</td>

</tr>

</tbody></table>

<p>

这里的组和用户的ID是系统中未使用的ID。</p>

<p> </p>

<p>

编译Postfix,并支持mysql和sasl:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail src]# <span class="type">tar -xvzf postfix-2.0.16.tar.gz</span></p>

<p>[root@mail src]# <span class="type">cd postfix-2.0.16</span></p>

<p> </p>

<p>[root@mail postfix-2.0.16]# <span class="type">make -f Makefile.init

makefiles \</span></p>

<p>> <span class="type">'CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/include/mysql

-I/usr/include/sasl' \</span></p>

<p>> <span class="type">'AUXLIBS=-L/usr/lib/mysql -L/usr/lib/sasl2

-lmysqlclient -lsasl2 -lz -lm'</span></p>

<p>[root@mail postfix-2.0.16]# <span class="type">make install</span></p>

</td>

</tr>

</tbody></table>

<p>

安装时,安装程序会提问一些问题,可以直接按回车采用默认值。</p>

<p>

这里切记要指定正确的SASL2的INCLUDE和LIB位置。由于现在很多linux发行版上都已经带有了sasl,如果不指定的话,很可能会使用了不同版本的头文件和库,在这种情况下,每次连接SMTP时,smtpd就会发生致命错误“Fatal:

SASL per-connection server init...”而崩溃。</p>

<p> </p>

<p>

给postfix用户做一个系统别名,并将超级用户的邮箱转发到一个普通用户如tester。使用/etc/postfix/aliases别名数据库:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td><p>[root@mail postfix-2.0.16]# <font color="#ff0000">cd /etc/postfix</font></p>

<p>[root@mail postfix]# <span class="type">echo 'root: virtualuser@cngnu.org' >>

/etc/postfix/aliases</span></p>

</td>

</tr>

</tbody></table>

<p>

生成/etc/postfix/aliases别名数据库:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>[root@mail postfix]# <span class="type">postalias /etc/postfix/aliases</span></td>

</tr>

</tbody></table>

<p>

生成/etc/postfix/virtual的DB库:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail postfix]# <span class="type">postmap virtual</span></p></td>

</tr>

</tbody></table>

<p>

保留db格式的virtual库是为了系统临时增加转发方便起见。</p>

<h2><a name="a.7.3"></a>7.3.  配置</h2>

<p>

修改/etc/postfix/master.cf中的关于maildrop的配置:</p>

<table width="100%" border="0" bgcolor="#ccffcc">

<tbody><tr>

<td><p>[root@mail postfix]# <span class="type">vi master.cf</span></p>

</td>

</tr>

</tbody></table>

<p>

将如下两行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc"> maildrop unix - n n - - pipe

flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}</td>

</tr>

</tbody></table>

<p>

修改为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc"> maildrop unix - n n - - pipe

flags=DRhu user=maildrop argv=/usr/local/bin/maildrop -d ${recipient}</td>

</tr>

</tbody></table>

<p>

这里要把maildrop的路径修改为上面安装的maildrop实际安装路径,用户maildrop是我们上面添加过的。

记着flags=...这行前面是以空格缩进的。</p>

<p> </p><table width="100%" border="0" bgcolor="#ccffcc">

<tbody><tr>

<td><p>[root@mail postfix]# <span class="type">vi main.cf</span></p>

</td>

</tr>

</tbody></table>

<p> </p>

<p>

修改/etc/postfix/main.cf的配置:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>myhostname = mail.cngnu.org</p>

<p>mydomain = cngnu.org</p>

<p>myorigin = $mydomain</p>

<p>mydestination = $mydomain,$myhostname</p>

<p>mynetworks_style = host</p>

<p>  </p>

<p>alias_maps = hash:/etc/postfix/aliases</p>

<p>alias_database = hash:/etc/postfix/aliases</p>

<p> </p>

<p>home_mailbox = Maildir/</p>

<p></p>

<p> </p>

<p>mailbox_transport = maildrop </p>

<p>fallback_transport = maildrop </p>

<p> </p>

<p>virtual_maps = hash:/etc/postfix/virtual,mysql:/etc/postfix/virtual.mysql</p>

<p> </p>

<p>smtpd_sasl_auth_enable = yes</p>

<p>broken_sasl_auth_clients = yes</p>

<p>smtpd_sasl_security_options = noanonymous</p>

<p> </p>

<p>smtpd_recipient_restrictions =

    permit_mynetworks,

    permit_sasl_authenticated,

    check_recipient_access mysql:/etc/postfix/filter.mysql,

    reject_invalid_hostname,

    reject_non_fqdn_hostname,

    reject_unknown_sender_domain,

    reject_non_fqdn_sender,

    reject_non_fqdn_recipient,

    reject_unknown_recipient_domain,

    reject_unauth_pipelining,

    reject_unauth_destination,

    permit</p>

<p></p></td>

</tr>

</tbody></table>

<p>

如果希望支持更多的虚拟域,可以在mydestination参数后面加上你所要支持的域即可。</p>

<p>

通过virtual和virtual.mysql为系统提供了邮箱本地查询表。</p>

<p>

在上面的配置文件里面使用了SASL来进行SMTP发信认证。</p>

<p> </p>

<p>

通过smtpd_recipient_restrictions提供了基本的反垃圾邮件功能。首先允许本地网络(这里是本机)和通过SASL认

证的用户可以使用本服务器发信;然后检查每个用户的全局邮件过滤功能是否打开,如果关闭则不进行后面的反垃圾邮件检查;其后是一些Postfix支持的基

本反垃圾邮件功能。</p>

<p>

创建/etc/postfix/virtual.mysql,它提供了本地用户和邮件转发功能。FORWARD字段默认是指向用户的存储邮箱名

的(Courier-IMAP所管理的邮箱名称),即进行本地投递;如果FORWARD字段是另外一个用户名或者邮件地址,则该邮件被转发到别的用户或其

它邮件地址。</p>

<table width="100%" border="0" bgcolor="#ccffcc">

<tbody><tr>

<td><p>[root@mail postfix]# <span class="type">vi virtual.mysql</span></p></td>

</tr>

</tbody></table>

<p> </p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>#</p>

<p># mysql config file for alias lookups on postfix</p>

<p>#</p>

<p> </p>

<p># the user name and password to log into the mysql server</p>

<p>hosts = localhost</p>

<p>user = mail</p>

<p>password = secret</p>

<p> </p>

<p># the database name on the servers</p>

<p>dbname = mail</p>

<p> </p>

<p># the table name</p>

<p>table = USER</p>

<p> </p>

<p>select_field = FORWARD</p>

<p>where_field = USERNAME</p>

<p>additional_conditions = and STATUS = 1 limit 1</p>

</td>

</tr>

</tbody></table>

<p> </p>

<table width="100%" border="0" bgcolor="#ccffcc">

<tbody><tr>

<td><p>[root@mail postfix]# <span class="type">vi filter.mysql</span></p></td>

</tr>

</tbody></table>

<p> </p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>#</p>

<p># mysql config file for filter flag on postfix</p>

<p>#</p>

<p> </p>

<p># the user name and password to log into the mysql server</p>

<p>hosts = localhost</p>

<p>user = mail</p>

<p>password = secret</p>

<p> </p>

<p># the database name on the servers</p>

<p>dbname = mail</p>

<p> </p>

<p># the table name</p>

<p>table = USER</p>

<p> </p>

<p>select_field = FILTER</p>

<p># OK : ignore filter</p>

<p># DUNNO : filter </p>

<p>where_field = MAIL </p>

<p>additional_conditions = and STATUS = 1 limit 1</p></td>

</tr>

</tbody></table>

<h2><a name="a.7.4"></a>7.4.  运行</h2>

<p>

启动命令如下:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail postfix]# <span class="type">/usr/sbin/postfix start</span></p></td>

</tr>

</tbody></table>

<p>

可以使用文末所附脚本设置postfix在系统启动时候自动运行。</p>

<h2><a name="a.7.5"></a>7.5.  测试Postfix</h2>

<p>

启动Postfix后,首先检查日志/var/log/messages有无错误信息,然后检查进程,应该有如下进程存在:检查端口及进程:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail postfix]#<font color="#ff0000"> </font><span class="type">pstree

|grep master</span></p>

<p> </p>

<p>|-master-+-pickup</p>

<p> </p></td>

</tr>

</tbody></table>

<p>

接着检查端口,应该有如下端口打开:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail postfix]# <span class="type">netstat -an |grep LISTEN</span></p>

<p> </p>

<p>tcp

0

0 0.0.0.0:25

0.0.0.0:*

LISTEN</p>

<p> </p></td>

</tr>

</tbody></table>

<p>

再检测SMTP服务是否正常:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail postfix]# <span class="type">telnet localhost 25</span></p>

<p>Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 mail.cngnu.org ESMTP Postfix

<span class="type">QUIT</span>

221 Bye

Connection closed by foreign host.</p></td>

</tr>

</tbody></table>

<p>

使用如下命令测试postfix的SMTP的认证(这里仅测试了“virtualuser@cngnu.org”,“trueuser”请自行测试):</p>

<p>

PLAIN认证方式:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p>

<p><font color="#ff0000">> 'print encode_base64("virtualuser\@cngnu.org\000virtualuser\@cngnu.org\000testpw");'</font>

dmlydHVhbHVzZXJAY25nbnUub3JnAHZpcnR1YWx1c2VyQGNuZ251Lm9yZwB0ZXN0cHc=</p>

<p> </p>

<p>[root@mail postfix]# <span class="type">telnet localhost 25</span></p>

<p>Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 mail.cngnu.org ESMTP Postfix</p>

<p class="type">EHLO cngnu</p>

<p>250-mail.cngnu.org</p>

<p>250-PIPELINING</p>

<p>250-SIZE 10240000</p>

<p>250-VRFY</p>

<p>250-ETRN</p>

<p>250-AUTH LOGIN PLAIN</p>

<p>250-AUTH=LOGIN PLAIN</p>

<p></p>

<p>250-XVERP</p>

<p>250 8BITMIME</p>

<p class="type">AUTH PLAIN dmlydHVhbHVzZXJAY25nbnUub3JnAHZpcnR1YWx1c2VyQGNuZ251Lm9yZwB0ZXN0cHc==</p>

<p>235 Authentication successful</p>

<p class="type">QUIT</p>

<p>221 Bye</p>

<p>Connection closed by foreign host.</p>

<p> </p>

<p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p>

<p><font color="#ff0000">> 'print encode_base64("trueuser\000trueuser\000testpw");'</font>

dHJ1ZXVzZXIAdHJ1ZXVzZXIAdGVzdHB3</p>

<p> </p></td>

</tr>

</tbody></table>

<p>

LOGIN认证方式:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p>

<p><font color="#ff0000">> 'print encode_base64("virtualuser\@cngnu.org");'</font></p>

<p>dmlydHVhbHVzZXJAY25nbnUub3Jn</p>

<p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p>

<p><font color="#ff0000">> 'print encode_base64("testpw");'</font></p>

<p>dGVzdHB3</p>

<p> </p>

<p>[root@mail postfix]# <span class="type">telnet localhost 25</span></p>

<p>Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 mail.cngnu.org ESMTP Postfix</p>

<p class="type">EHLO cngnu</p>

<p>250-mail.cngnu.org</p>

<p>250-PIPELINING</p>

<p>250-SIZE 10240000</p>

<p>250-VRFY</p>

<p>250-ETRN</p>

<p>250-AUTH LOGIN PLAIN</p>

<p>250-AUTH=LOGIN PLAIN</p>

<p></p>

<p>250-XVERP</p>

<p>250 8BITMIME</p>

<p class="type">AUTH LOGIN</p>

<p><i>3</i>34 VXNlcm5hbWU6</p>

<p class="type">dmlydHVhbHVzZXJAY25nbnUub3Jn</p>

<p>334 UGFzc3dvcmQ6</p>

<p class="type">dGVzdHB3</p>

<p>235 Authentication successful</p>

<p class="type">QUIT</p>

<p>221 Bye</p>

<p>Connection closed by foreign host.</p>

<p> </p>

<p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p>

<p><font color="#ff0000">> 'print encode_base64("trueuser");'</font></p>

<p>dHJ1ZXVzZXI=</p>

<p>[root@mail postfix]# <font color="#ff0000">perl -MMIME::Base64 -e \</font></p>

<p><font color="#ff0000">> 'print encode_base64("testpw");'</font></p>

<p>dGVzdHB3</p>

<p> </p></td>

</tr>

</tbody></table>

<p>

此时,由于还没有安装Courier-IMAP以及创建邮箱,所以还不能提交邮件,请继续下一步。</p>

<p>

这里使用Perl里面的MIME::Base64模块(如果需要安装:perl -MCPAN -e 'install

MIME::Base64;')来取得这个验证串:perl -MMIME::Base64 -e 'print

base64_encode("用户名\000用户名\000密码");'来得到MIME-Base64编码的验证串(“\000”是八进制的ASCII

(0)字符)。此外,你也可以使用mmencode来生成,mmencode可以在metamail这个包里面找到。</p>

<p> </p>

<h1><a name="a.8"></a>8.  安装Courier-IMAP</h1>

<h2><a name="a.8.1"></a>8.1.  下载</h2>

<p>

<a href="http://sourceforge.net/projects/courier/">http://sourceforge.net/projects/courier/</a></p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail postfix]# <span class="type">cd /usr/src</span></p>

<p>[root@mail src]# <span class="type">wget

<a href="http://umn.dl.sourceforge.net/sourceforge/courier/courier-imap-2.2.1.tar.bz2">http://umn.dl.sourceforge.net/sourceforge/courier/courier-imap-2.2.1.tar.bz2 </a>

</span></p></td>

</tr>

</tbody></table>

<h2><a name="a.8.2"></a>8.2.  编译与安装</h2>

<p>

编译Cyrus-IMAP,并取消kerberos支持(在Redhat中,kerberos库有问题,很难编译通过,Mandrake则可以通过;此外,我们也不需要kerberos的支持)和snmp的支持:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail src]# <span class="type">tar -jxf courier-imapd-2.2.1.tar.ba2</span></p>

<p>[root@mail src]# <span class="type">cd courier-imapd-2.2.1</span></p>

<p> </p>

<p>[root@mail courier-imapd-2.2.1]# <span class="type">./configure

--with-redhat \</span></p>

<p>> <span class="type">--disable-root-check --enable-unicode=utf-8,iso-8859-1,gb2312

\ </span></p>

<p>> <font color="#ff0000">--with-trashquota </font><font color="#ff0000"> --with-dirsync</font></p>

<p> </p>

<p>[root@mail courier-imapd-2.2.1]# <span class="type">make </span></p>

<p>[root@mail courier-imapd-2.2.1]# <span class="type">make install-strip</span></p>

<p>[root@mail courier-imapd-2.2.1]# <span class="type">make install-configure</span></p>

<p>[root@mail courier-imapd-2.2.1]# <span class="type">cp courier-imap.sysvinit

/etc/rc.d/init.d/courier-imap</span></p>

<p>[root@mail courier-imapd-2.2.1]#<span class="type"> chmod 755

/etc/rc.d/init.d/courier-imap</span></p>

<p>[root@mail courier-imapd-2.2.1]#<span class="type"> chkconfig --level

0123456 courier-imap</span><span class="type"> on

</span></p> </td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.8.3"></a>8.3.  配置</h2>

<p>

修改Courier-IMAP的认证配置文件/usr/lib/courier-imap/etc/authdaemonrc:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail courier-imapd-2.2.1]# <span class="type">cd /usr/lib/courier-imap/etc</span></p>

<p>[root@mail etc]# <span class="type">vi authdaemonrc </span></p> </td>

</tr>

</tbody></table>

<p>

内容如下,确保只使用mysql认证模块:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc"> <p>authmodulelist="authmysql"

authmodulelistorig="authmysql"

version="authdaemond.mysql"

</p> </td>

</tr>

</tbody></table>

<p>

然后修改mysql认证模块的配置文件:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail etc]# <span class="type">vi authmysqlrc </span></p>

</td>

</tr>

</tbody></table>

<p>

内容如下:</p>

<table width="100%" border="0" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>MYSQL_SERVER localhost

MYSQL_USERNAME mail

MYSQL_PASSWORD secret

MYSQL_SOCKET /var/lib/mysql/mysql.sock

MYSQL_PORT 3306

MYSQL_DATABASE mail

MYSQL_USER_TABLE USER

MYSQL_CRYPT_PWFIELD PASSWORD

MYSQL_CLEAR_PWFIELD CLEAR_PASSWORD

MYSQL_UID_FIELD UID

MYSQL_GID_FIELD GID

MYSQL_LOGIN_FIELD USERNAME

MYSQL_HOME_FIELD HOMEDIR

MYSQL_NAME_FIELD USERNAME

MYSQL_MAILDIR_FIELD MAILDIR

MYSQL_QUOTA_FIELD QUOTA

MYSQL_WHERE_CLAUSE STATUS=1

</p></td>

</tr>

</tbody></table>

<p>

编辑IMAP的配置文件imapd,使其自动启动:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail etc]# <span class="type">vi imapd </span></p></td>

</tr>

</tbody></table>

<p>

修改其最后一行为YES:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>IMAPDSTART=YES</p>

</td>

</tr>

</tbody></table>

<p>

编辑POP3的配置文件pop3d,使其自动启动:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail etc]# <span class="type">vi pop3d </span></p></td>

</tr>

</tbody></table>

<p>

修改其最后一行为YES:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>POP3DSTART=YES</p></td>

</tr>

</tbody></table>

<h2><a name="a.8.4"></a>8.4.  运行</h2>

<p>

启动Courier-IMAP,启动命令如下:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail etc]# <span class="type">/etc/rc.d/init.d/courier-imap

start </span></p></td>

</tr>

</tbody></table>

<p>

Courier-IMAP的认证进程会自动运行。</p>

<h2><a name="a.8.5" id="a.8.5"></a>8.5.  测试Courier-IMAP</h2>

<p>

启动Courier-IMAP后,首先检查日志/var/log/messages和/var/log/imapd.log有无错误信息,然后检查进程,应该有如下进程存在:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail etc]# <span class="type">pstree |grep authdaemond</span></p>

<p> </p>

<p>|-authdaemond.mys---5*[authdaemond.mys]</p>

<p>[root@mail etc]# <span class="type">pstree |grep courier </span></p>

<p> </p>

<p>|-2*[courierlogger]</p>

<p>|-2*[couriertcpd]</p></td>

</tr>

</tbody></table>

<p>

接着检查端口,应该有如下端口打开:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail etc]# <span class="type">netstat -an |grep LISTEN</span></p>

<p> </p>

<p>tcp

0

0 0.0.0.0:110

0.0.0.0:*

LISTEN</p>

<p>tcp

0

0 0.0.0.0:143

0.0.0.0:*

LISTEN</p> </td>

</tr>

</tbody></table>

<p> </p>

<p>

现在创建邮箱。</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail etc]# <span class="type">mkdir -p /data/mail</span></p>

<p>[root@mail etc]# <span class="type">chown maildrop:maildrop /data/mail</span></p>

<p>[root@mail etc]# <span class="type">su -s/bin/bash maildrop </span></p>

<p>bash-2.05b$ <span class="type">cd /data/mail</span></p> <p>bash-2.05b$ <span class="type"></span><span class="type">mkdir trueuser</span></p>

<p>bash-2.05b$ <span class="type">/usr/local/bin/maildirmake trueuser/Maildir</span></p>

<p>bash-2.05b$ <span class="type"></span><span class="type">mkdir -p cngnu.org/virtualuser</span></p>

<p>bash-2.05b$ <span class="type">/usr/local/bin/maildirmake cngnu.org/virtualuser/Maildir</span></p> </td>

</tr>

</tbody></table>

<p>

再检测POP3和IMAP服务:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail etc]# <span class="type">telnet localhost 110</span></p>

<p>+OK Hello there </p>

<p class="type">USER virtualuser@cngnu.org </p>

<p>+OK Password required. </p>

<p class="type">PASS testpw</p>

<p>+OK Logged in. </p>

<p class="type">QUIT</p>

<p>+OK bye-bye </p>

</td>

</tr>

</tbody></table>

<h1><a name="a.9" id="a.9"></a>9.  安装IMP</h1>

<h2><a name="a.9.1" id="a.9.1"></a>9.1.  下载</h2>

<p>

http://www.horde.org/horde/</p>

<p>

http://www.horde.org/imp/3.2.2/</p>

<p>

http://www.horde.org/turba/</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail etc]# <span class="type">cd /usr/src</span></p>

<p>[root@mail src]# <span class="type">wget <a href="ftp://ftp.horde.org/pub/horde/horde-2.2.4.tar.gz">ftp://ftp.horde.org/pub/horde/horde-2.2.4.tar.gz</a></span></p>

<p>[root@mail src]# <span class="type">wget <a href="ftp://ftp.horde.org/pub/pear/pear-1.1.tar.gz">ftp://ftp.horde.org/pub/pear/pear-1.1.tar.gz</a></span></p>

<p>[root@mail src]# <span class="type">wget <a href="ftp://ftp.horde.org/pub/imp/imp-3.2.2.tar.gz">ftp://ftp.horde.org/pub/imp/imp-3.2.2.tar.gz</a></span></p>

<p>[root@mail src]# <span class="type">wget <a href="ftp://ftp.horde.org/pub/turba/turba-1.2.1.tar.gz">ftp://ftp.horde.org/pub/turba/turba-1.2.1.tar.gz</a></span></p></td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.9.2" id="a.9.2"></a>9.2.  配置Apache与PHP</h2>

<p>

IMP对PHP的环境要求较高。所以通常需要升级PHP包,并安装由Horde定制后的PEAR包。</p>

<p>

修改/etc/php.ini,将register_globals功能打开。</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>register_globals = On</p></td>

</tr>

</tbody></table>

<p>

安装PEAR包,在AS3中,它位于/usr/share/pear下:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail src]# <span class="type">tar zxf /usr/src/pear-1.1.tar.gz</span><span class="type"></span></p>

<p>[root@mail lib]# <span class="type">cd /usr/share</span></p>

<p>[root@mail lib]# <span class="type">/bin/cp -Rf /usr/src/pear/* pear</span></p></td>

</tr>

</tbody></table>

<p>

最后重新启动Apache:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail lib]# <span class="type">chkconfig --level 0123456 httpd on </span></p>

<p> [root@mail lib]# <span class="type">/etc/rc.d/init.d/httpd restart</span></p></td>

</tr>

</tbody></table>

<h2><a name="a.9.3" id="a.9.3"></a>9.3.  配置Horde</h2>

<p>

安装Horde:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail lib]# <font color="#ff0000">cd /var/www/html</font></p>

<p>[root@mail html]# <span class="type">tar zxf /usr/src/horde-2.2.4.tar.gz</span></p>

<p>[root@mail html]# <span class="type">mv horde-2.2.4 horde</span></p>

<p>[root@mail html]# <span class="type">cd horde/scripts/db</span></p>

<p> </p>

<p>[root@mail db]# <span class="type">mysql < mysql_create.sql</span></p>

<p> </p>

<p>[root@mail db]# <span class="type">cd ../../config</span></p>

<p>[root@mail config]# <span class="type">for foo in *.dist; do cp $foo

`basename $foo .dist`;done</span></p></td>

</tr>

</tbody></table>

<p>

然后修改config目录下面的horde.php。</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi horde.php</span></p></td>

</tr>

</tbody></table>

<p>

修改162行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['prefs']['driver'] = 'none';</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['prefs']['driver'] = 'sql';</p></td>

</tr>

</tbody></table>

<p>

修改171行至176行,将其注释去掉并写入horde数据库的口令:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>// $conf['prefs']['params']['phptype'] = 'mysql';

// $conf['prefs']['params']['hostspec'] = 'localhost';

// $conf['prefs']['params']['username'] = 'horde';

// $conf['prefs']['params']['password'] = '*****';

// $conf['prefs']['params']['database'] = 'horde';

// $conf['prefs']['params']['table'] = 'horde_prefs';

</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['prefs']['params']['phptype'] = 'mysql';

$conf['prefs']['params']['hostspec'] = 'localhost';

$conf['prefs']['params']['username'] = 'horde';

$conf['prefs']['params']['password'] = 'horde';

$conf['prefs']['params']['database'] = 'horde';

$conf['prefs']['params']['table'] = 'horde_prefs';

</p></td>

</tr>

</tbody></table>

<p>

这里我们没有修改horde数据库的默认的数据库设置,如果在实际使用中,至少应该取一个比较复杂的密码。</p>

<p> </p>

<p>

再来修改config目录下面的registry.php。</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi registry.php</span></p></td>

</tr>

</tbody></table>

<p>

修改23行至24行,将其注释去掉:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>// $this->registry['auth']['login'] = 'imp';

// $this->registry['auth']['logout'] = 'imp';

</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$this->registry['auth']['login'] = 'imp';

$this->registry['auth']['logout'] = 'imp';

</p></td>

</tr>

</tbody></table>

<p>

然后修改119、138行激活IMP和Turba:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p> 'status' => 'inactive'

</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p> 'status' => 'active'

</p></td>

</tr>

</tbody></table>

<p>

最后在浏览器中访问如下URL测试Horde需要的环境是否满足:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>http://你的邮件服务器的IP/horde/test.php</p></td>

</tr>

</tbody></table>

<p>

如果发现有红色的提示,可能需要修改你的PHP的安装和配置(参见上一节),然后再重新测试。</p>

<h2><a name="a.9.4" id="a.9.4"></a>9.4.  配置IMP</h2>

<p>

安装IMP:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">cd ..</span></p>

<p>[root@mail horde]# <span class="type">tar zxf /usr/src/imp-3.2.2.tar.gz</span></p>

<p>[root@mail horde]# <span class="type">mv imp-3.2.2 imp</span></p>

<p>[root@mail horde]# <span class="type">cd imp/config</span></p>

<p>[root@mail config]# <span class="type">for foo in *.dist; do cp $foo

`basename $foo .dist`;done</span></p></td>

</tr>

</tbody></table>

<p>

然后修改config目录里面的conf.php:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi conf.php</span></p></td>

</tr>

</tbody></table>

<p>

修改37行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['menu']['apps'] = array();</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['menu']['apps'] = array('turba');</p></td>

</tr>

</tbody></table>

<p>

修改57行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['user']['allow_resume_all'] = false;</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['user']['allow_resume_all'] = true;</p></td>

</tr>

</tbody></table>

<p>

修改63行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['user']['allow_resume_all_in_drafts'] = false;</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['user']['allow_resume_all_in_drafts'] = true;</p></td>

</tr>

</tbody></table>

<p> </p>

<p>

然后修改prefs.php:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi prefs.php</span></p></td>

</tr>

</tbody></table>

<p>

将自动维护功能关闭,修改426、427行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p> 'value' => 1,

'locked' => false,

</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p> 'value' => 0,

'locked' => true,

</p></td>

</tr>

</tbody></table>

<p>

再注释773行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>'value' => '',</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>//'value' => '',</p></td>

</tr>

</tbody></table>

<p>

取消注释774行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>// 'value' => 'localsql',</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>'value' => 'localsql',</p></td>

</tr>

</tbody></table>

<p> </p>

<p>

最后修改servers.php:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi servers.php</span></p></td>

</tr>

</tbody></table>

<p>

注释除“cyrus”服务器外的所有服务器配置,然后修改“cyrus”服务器的配置为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p> $servers['cyrus'] = array(

'name' => 'IMAP Server',

'server' => 'localhost',

'protocol' => 'imap/notls',

'port' => 143,

'folders' => 'mail/',

'namespace' => '',

'maildomain' => 'cngnu.org',

'smtphost' => 'mail.cngnu.org',

'realm' => 'cngnu.org',

'preferred' => ''

);

</p> </td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.9.5" id="a.9.5"></a>9.5.  配置Turba</h2>

<p>

安装Turba:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">cd ../..</span></p>

<p>[root@mail horde]# <span class="type">tar zxf /usr/src/turba-1.2.1.tar.gz</span></p>

<p>[root@mail horde]# <span class="type">mv turba-1.2.1 turba</span></p>

<p>[root@mail horde]# <span class="type">cd turba/config</span></p>

<p>[root@mail config]# <span class="type">for foo in *.dist; do cp $foo

`basename $foo .dist`;done</span></p></td>

</tr>

</tbody></table>

<p>

然后修改config目录里面的conf.php:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi conf.php</span></p></td>

</tr>

</tbody></table>

<p>

修改32行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['menu']['apps'] = array();</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>$conf['menu']['apps'] = array('imp');</p></td>

</tr>

</tbody></table>

<p>

然后修改config目录里面的sources.php:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <span class="type">vi sources.php</span></p></td>

</tr>

</tbody></table>

<p>

修改146行:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>'password' => '*****';</p></td>

</tr>

</tbody></table>

<p>

为:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>'password' => 'horde';</p></td>

</tr>

</tbody></table>

<p>

最后,添加turba数据库表:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail config]# <font color="#ff0000">cd ../scripts/drivers</font></p>

<p>[root@mail config]# <font color="#ff0000">mysql horde <turba.sql</font></p></td>

</tr>

</tbody></table>

<p> </p>

<h2><a name="a.9.6" id="a.9.6"></a>9.6.  测试IMP</h2>

<p>

最后在浏览器中访问如下URL:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc">

<p>http://你的邮件服务器的IP/horde/</p></td>

</tr>

</tbody></table>

<p>

输入用户名virtualuser@cngnu.org和密码testpw登录(或trueuser)。</p>

<h1><a name="a.10" id="a.10"></a>10.  其他</h1>

<h2><a name="a.10.1" id="a.10.1"></a>10.1.  启动脚本</h2>

<p>

Courier-IMAP已经有了启动脚本,只需要为Postfix编写一个启动脚本postfix即可:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc"><pre>#!/bin/bash

#

# mailsys This shell script takes care of starting and stopping Postfix

# author : xingyu.wang <wxy@cngnu.org> 2004/1/28

#

# chkconfig: 2345 80 30

# description: Postfix is a Mail Transport Agent, which is the program

# that moves mail from one machine to another.

#

# processname: mailsys

# pidfile: /var/run/postfix.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -f /usr/sbin/postfix ] || exit 0

RETVAL=0

prog="Postfix"

start() {

# Start daemons.

echo -n $"Starting $prog: "

/usr/sbin/postfix start > /dev/null 2>&1 &

RETVAL=$?

if [ $RETVAL -eq 0 ]; then

touch /var/lock/subsys/postfix

success $"$prog start"

else

failure $"$prog start failure"

fi

echo

return $RETVAL

}

stop() {

# Stop daemons.

echo -n $"Shutting down $prog: "

/usr/sbin/postfix stop > /dev/null 2>&1 &

RETVAL=$?

if [ $RETVAL -eq 0 ]; then

rm -f /var/lock/subsys/postfix

success $"$prog stop"

else

failure $"$prog stop failure"

fi

echo

return $RETVAL

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

restart|reload)

stop

start

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|restart}"

exit 1

esac

exit $RETVAL

</pre></td>

</tr>

</tbody></table>

<p> </p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td>

<p>[root@mail root]# <span class="type">chmod 755 /etc/rc.d/init.d/postfix</span></p>

<p>[root@mail root]# <span class="type">chkconfig --level 0123456 postfix

on </span></p>

<p>[root@mail root]# <span class="type">chkconfig --level 0123456 sendmail

off</span></p></td>

</tr>

</tbody></table>

<h2><a name="a.10.2" id="a.10.2"></a>10.2.  整体测试</h2>

<p>

创建邮箱后,测试发信功能:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail root]# <span class="type">mail trueuser </span></p>

<p>Subject: <span class="type">test by me</span></p>

<p class="type">this is a test.</p>

<p class="type">.</p>

<p>CC:</p>

<p>[root@mail root]# <span class="type">mailq</span></p>

<p>Mail queue is empty</p>

<p>[root@mail root]# <span class="type">tail /var/log/maillog</span></p>

<p> </p></td>

</tr>

</tbody></table>

<p>

使用mailq来查看邮件队列是否有错误,并查看/var/log/maillog是否有错误信息。如果一切正常,说明信件已经发送到trueuser了。</p>

<p>

测试收信,先测试POP3:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td> <p>[root@mail root]# <span class="type">telnet localhost 110</span></p>

<p>+OK hello there </p>

<p class="type">USER trueuser </p>

<p>+OK Password required. </p>

<p class="type">PASS testpw</p>

<p>+OK Logged in. </p>

<p class="type">LIST</p>

<p>1 400</p>

<p class="type">TOP 1 10</p>

<p>Return-Path: <root@cngnu.org>

Delivered-To: <trueuser@cngnu.org>

Received: by mail.cngnu.org (Postfix, from userid 0)

id 6A7C4CCCF; Mon, 26 Jan 2004 21:27:23 +0800 (CST)

To: trueuser@cngnu.org

Subject: test by me

Message-Id: <20040126212723.6A7C4CCCF@mail.cngnu.org>

Date: Mon, 26 Jan 2004 21:27:23 +0800 (CST)

From: root@cngnu.org (root)</p>

<p>this is a test.</p>

<p>.</p>

<p class="type">QUIT</p>

<p>+OK</p></td>

</tr>

</tbody></table>

<p> </p>

<p>

最后测试IMP,在浏览器中访问如下URL:</p>

<table border="0" width="100%" bgcolor="#ccffcc">

<tbody><tr>

<td bgcolor="#ffffcc"> <p>http://你的IMP服务器的IP/horde/</p></td>

</tr>

</tbody></table>

<p>

输入用户名trueuser和密码testpw登录。</p>

<p> </p>

<p>

你也可以使用任何其它的邮件客户端程序来测试,如kmail、Outlook Express等等。</p>

<p> </p>

<p>

OK,到此为止,我们的邮件系统就架设完毕了。如果有任何问题,请到论坛<a href="http://www.anti-spam.org.cn/forum/">http://www.anti-spam.org.cn/forum/</a>的mail版讨论。</p>

<hr size="1">

<p> </p>

</body></html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有