分享
 
 
 

CNGNUPostfix邮件系统系列指南之一0.52

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

<html>

<head>

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

<title>Postfix + Cyrus-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;}

.style2 {color: #E63A00}

-->

</style>

</head>

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

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

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

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

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

完全指南</h1>

<hr noshade size="1">

<p></p>

<blockquote>

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

<p>版本:0.52</p>

<p>版权:GPL</p>

<p>发布日期:2003-12-02</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></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服务器、Cyrus-IMAP做POP3/IMAP4服务器、通过Cyrus-SASL对存储在MySQL数据库中的用户进行验证和授权,并且使用IMP来提供一个完善的WEBMAIL界面。</p>

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

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

<p>有关本文所涉及的技术问题,请到<a href="http://anti-spam.org.cn/forums/index.php?showforum=6">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>2002-05-21 第一次发布,版本0.20。</li>

<li>2002-08-13 修正一些错误,版本0.21。</li>

<li>2002-08-23 修正一些错误,版本0.22。</li>

<li>2002-09-12 在RedHat Linux Advance Server V2.1上进行了测试,修正了一些错误,版本0.30。</li>

<li>2002-12-12 修正了一些错误,添加了IMP部分的内容,版本0.31。</li>

<li>2003-01-30 修正了一些错误,添加了非明文密码部分的内容,版本0.32。</li>

<li>2003-02-05 修正了一些错误,版本0.33</li>

<li>2003-03-26 使用了SASL V2和Cyrus-IMAP 2,支持使用db4的新的Linux发行版,如RedHat 8.0和Mandrake

9.0,并以RedHat 8.0为示范平台。修正了一些错误,版本0.40。</li>

<li>2003-03-28 修正了一些错误,特别感谢bjchenxu,版本0.41。</li>

<li>2003-09-24 添加了虚拟域功能,修正了一些笔误,版本0.50。</li>

<li>2003-10-13 修正了虚拟域的错误,版本0.51。</li>

<li>2003-12-02 修正了部分错误,版本0.52。如果没有其它的输入错误问题,本文将不再更新。</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> 谢谢lesson.ward、Yunping Zhu、Temp、bjchenxu的指正。</p>

<p></p>

<p>参考文档:<a href="http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html">http://www.delouw.ch/linux/Postfix-Cyrus-Web-cyradm-HOWTO/html/index.html</a>。在这篇文章撰写之初,参考过该文章,目前该文章也在不断更新,大家也可以看看。</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-IMAP |

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

| | Cyrus-SASL |

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

| | saslauthd |

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

| | PAM |

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

| | pam_mysql |

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

| MySQL |

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

</font></pre>

<p> 整个系统对外的界面包括几个部分,用来发信的SMTP、用来收信的POP3和IMAP、以及一个WEB界面的邮件使用系统。这里没有提供WEB界面的管理工具,需要大家自行依据实际需要开发。</p>

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

<p>认证流程比较繁琐。整个认证是通过Cyrus-SASL来做的,通过运行一个守护进程saslauthd来监听认证需求。saslauthd这里使用了pam认证方式通过pam_mysql插件对MySQL数据库进行查找。</p>

<p>系统为了支持虚拟域,所有的用户验证都用用户的邮件全称作为用户名,其实际的邮箱由于Postfix的限制,使用将邮件地址中“@”换成“~”的邮箱名。</p>

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

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

<p>这里以RedHat Linux V 8.0为说明平台。</p>

<p>该说明平台除了基本的操作系统部分外,系统中还安装了如下的RPM:</p>

<p>一、gcc:</p>

<p>1. gcc-3.2-7</p>

<p>2. gcc-c++-3.2-7</p>

<p>二、db3:</p>

<p>1. db4-devel-4.0.14-14</p>

<p>2. db4-4.0.14-14</p>

<p>3. db4-utils-4.0.14-14</p>

<p>三、pam:</p>

<p>1. pam-0.75-40</p>

<p>2. pam-devel-0.75-40</p>

<p></p>

<p>四、mysql:</p>

<p>1. mysql-3.23.52-3</p>

<p>2. mysql-server-3.23.52-3</p>

<p>3. mysql-devel-3.23.52-3</p>

<p>五、IMP相关:</p>

<p>1. httpd-2.0.40-8</p>

<p>2. httpd-devel-2.0.40-8</p>

<p>2. gettext-0.11.4-3</p>

<p>3. imap-devel-2001a-15</p>

<p>4. krb5-libs-1.2.5-6</p>

<p>5. krb5-devel-1.2.5-6</p>

<p>6. openssl-0.9.6b-29</p>

<p>7. openssl-devel-0.9.6b-29</p>

<p></p>

<p>如果系统中没有,请自行安装RPM包或编译安装。除此之外,其他需要的部分将以源码方式编译。</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>启动命令如下:</p>

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

<tr>

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

</tr>

</table>

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

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

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

<tr>

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

<p></p>

<p>|-safe_mysqld---mysqld---mysqld---2*[mysqld]</p>

<p></p></td>

</tr>

</table>

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

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

<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 0.0.0.0:33060.0.0.0:*LISTEN

</p></td>

</tr>

</table>

<p></p>

<h2><a name="a.4.1"></a>4.3. 配置</h2>

<p>MySQL安装配置好以后,在MySQL中创建邮件用户数据库,并添加一个测试用户“tester@cngnu.org”,密码是“testpw”:</p>

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

<tr>

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

<p>Reading table information for completion of table and column names</p>

<p>You can turn off this feature to get a quicker startup with -A</p>

<p></p>

<p>Welcome to the MySQL monitor. Commands end with ; or \g.</p>

<p>Your MySQL connection id is 1 to server version: 3.23.52</p>

<p></p>

<p>Type 'help;' or '\h' for help. Type '\c' to clear the buffer.</p>

<p></p>

<p>mysql> <span class="type">CREATE DATABASE mail;</span></p>

<p>Query OK, 1 row affected (0.00 sec)</p>

<p></p>

<p>mysql> <span class="type">GRANT ALL ON mail.* TO mail@localhost</span></p>

<p>-> <span class="type">IDENTIFIED BY "secret";</span></p>

<p>Query OK, 0 row affected (0.00 sec)</p>

<p></p>

<p>mysql> <span class="type">FLUSH PRIVILEGES;</span></p>

<p>Query OK, 0 row affected (0.00 sec)</p>

<p></p>

<p>mysql> <span class="type">USE mail;</span></p>

<p>Database changed</p>

<p></p>

<p>mysql> <span class="type">CREATE TABLE USER (</span></p>

<p>-> <span class="type">USERNAME varchar(128) not null default '',</span></p>

<p>-> <span class="type">PASSWORD varchar(64) not null default '',</span></p>

<p>-> <span class="type">FORWARD varchar(128) not null default '',</span></p>

<p>-> <font color="#FF0000">PATITION varchar(32) not null default 'default',</font></p>

<p>-> <font color="#FF0000">QUOTE int not null default '1024',</font></p>

<p>-> <span class="type">STATUS tinyint not null default '1');</span></p>

<p>Query OK, 0 rows affected (0.00 sec)</p>

<p></p>

<p>mysql> <font color="#FF0000">CREATE INDEX USER ON USER (USERNAME,PASSWORD,FORWARD,STATUS);</font></p>

<p>Query OK, 0 rows affected (0.00 sec)</p>

<p>Records: 0 Duplicates: 0 Warnings: 0</p>

<p></p>

<p>mysql> <span class="type">INSERT INTO USER (USERNAME,PASSWORD,FORWARD)VALUES</span> </p>

<p>-> <span class="type">('tester@cngnu.org','$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/','tester~cngnu.org');</span></p>

<p>Query OK, 1 row affected (0.01 sec)</p>

<p></p>

<p>mysql> <span class="type">\q</span></p>

<p>Bye</p></td>

</tr>

</table>

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

<ul>

<li>USERNAME和PASSWORD字段就是用户名和MD5-Crypt密码。这里采用了加密密码是为了更好的安全性。</li>

<li>FORWARD字段默认是指向用户的邮箱名的(邮箱名与用户的邮件地址全称类似,只是将“@”换成了“~”,参见下面Cyrus-IMAP部分描述),在此情况下,邮件递交到本地邮箱(由于Postfix区分邮箱的大小写,所以通过这样的一个转发,正好可以消除大小写的区别);如果FORWARD字段是另外一个用户名或者邮件地址,则该邮件被转发到别的用户或其它邮件地址。</li>

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

<li>上面添加了一个邮件用户“tester@cngnu.org”,实际存储该用户的邮件在邮箱文件夹“cngnu~cngnu.org”中,它的密码是“testpw”,加密后的(MD5-CRYPT)密文是“$1$pi.WVgBx$a3dUCzBnbY76jnZlqWQCQ/”(可以通过系统的passwd命令来添加一个用户,生成密码,然后才/etc/shadow中复制。)</li>

</ul>

<p></p>

<h1><a name="a.5"></a>5. 安装pam_mysql</h1>

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

<p><a href="http://sourceforge.net/projects/pam-mysql/">http://sourceforge.net/projects/pam-mysql/</a></p>

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

<tr>

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

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

href="http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.4.7.tar.gz">http://telia.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz</a></span></p>

</td>

</tr>

</table>

<p>注:如果不能访问该网站取得pam_mysql,请自行使用代理服务器访问。</p>

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

<p>编译pam_mysql:</p>

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

<tr>

<td> <p>[root@mail src]# <span class="type">tar -zxf pam_mysql-0.5.tar.gz</span></p>

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

</td>

</tr>

</table>

<p>修改pam_mysql.c的源代码,去掉调试消息:</p>

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

<tr>

<td> <p>[root@mail pam_mysql]# <span class="type">vi +54 pam_mysql.c</span></p>

</td>

</tr>

</table>

<p>将如下一行:</p>

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

<tr>

<td bgcolor="#FFFFCC">#define DEBUG</td>

</tr>

</table>

<p>修改为:</p>

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

<tr>

<td bgcolor="#FFFFCC">/* #define DEBUG */</td>

</tr>

</table>

<p>然后编译:</p>

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

<tr>

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

<p>[root@mail pam_mysql]# <span class="type">cp pam_mysql.so /lib/security</span></p></td>

</tr>

</table>

<p></p>

<p>有些情况下,这个编译会报错,但是如果编译能生成pam_mysql.so模块,还是可以用的。</p>

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

<p>创建/etc/pam.d/mail,它用来支持Cyrus-IMAP的imap认证、pop认证和Postfix的smtp认证:</p>

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

<tr>

<td> <p>[root@mail pam_mysql]# <span class="type">cd /etc/pam.d</span></p>

<p>[root@mail pam.d]# <span class="type">echo auth sufficient pam_mysql.so

user=mail passwd=secret \</span></p>

<p>> <span class="type">host=localhost db=mail table=USER usercolumn=USERNAME

passwdcolumn=PASSWORD \</span></p>

<p>> <span class="type">crypt=1 sqllog=0 > /etc/pam.d/mail</span></p>

<p>[root@mail pam.d]# <span class="type">echo account required pam_mysql.so

user=mail passwd=secret \</span></p>

<p>> <span class="type">host=localhost db=mail table=USER usercolumn=USERNAME

passwdcolumn=PASSWORD \</span></p>

<p>><span class="type"> crypt=1 sqllog=0 >> /etc/pam.d/mail</span></p>

<p>[root@mail pam.d]# <span class="type">echo auth sufficient pam_unix_auth.so

>> /etc/pam.d/mail</span></p>

<p>[root@mail pam.d]# <span class="type">echo account sufficient pam_unix_acct.so

>> /etc/pam.d/mail</span></p>

</td>

</tr>

</table>

<p>这里前面两行是指通过mysql数据库来认证用户,后面两行指是通过UNIX的基本方式认证用户(即系统用户)。这里我们之所以保留UNIX系统认证模式,是因为我们下面要通过系统用户cyrus来管理cyrus-imap邮箱。不过你也可以选择将这个管理帐号cyrus放入mysql认证数据库里面,只需要你在上面的数据库里面添加一个cyrus用户。</p>

<p>通过给上面的crypt赋予不同的值可以使用多种密码存储方式:</p>

<ul>

<li>crypt=0:表示使用明文来存储密码。这样存储的好处是简单,但是不够安全。</li>

<li>crypt=1:表示使用UNIX系统的DES加密密码方式来存储。即通常的UNIX的/etc/passwd(老式系统加密口令存储在这里)或/etc/shadow(较为新的系统加密口令存放在这里)中存储的加密口令。加密口令有两种,一种是普通的des加密的,也叫crypt(),这种密码是13位长,前面两个字符是加密种子;还有一种是使用了MD5算法增强了的,也叫MD5

crypt(),这种密码的加密种子是以$1$开头的12个字符,密码长度不定。</li>

<li>crypt=2:表示使用mysql的SQL函数password()加密方式来存储。</li>

<li>crypt=3:表示使用md5的散列方式来存储。这种方式和MD5 crypt()是不一样的。</li>

</ul>

<p>一般如果从系统用户迁移到使用数据库的虚拟用户时,可以使用crypt=1方式,系统会自动辨别两种加密口令。如果需要开发用户修改口令的功能时,C和Perl里面的crypt函数不能支持MD5

crypt()口令,需要使用额外的编程或模块来支持。</p>

<p>做个符号链接/etc/pam.d/imap,它用来支持Cyrus-IMAP的imap认证:</p>

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

<tr>

<td> <p>[root@mail pam.d]# <span class="type">[ -f imap ] && mv imap

imap.orig </span></p>

<p></p>

<p>[root@mail pam.d]# <span class="type">ln -s mail imap</span></p></td>

</tr>

</table>

<p></p>

<p>同样创建/etc/pam.d/pop,它用来支持Cyrus-IMAP的pop3认证:</p>

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

<tr>

<td> <p>[root@mail pam.d]# <span class="type">[ -f pop ] && mv pop

pop.orig</span></p>

<p></p>

<p>[root@mail pam.d]# <span class="type">ln -s mail pop</span></p>

</td>

</tr>

</table>

<p>同样创建/etc/pam.d/smtp,它用来支持Postfix的smtp auth认证:</p>

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

<tr>

<td> <p>[root@mail pam.d]# <span class="type">[ -f smtp ] && mv smtp

smtp.orig</span></p>

<p>[root@mail pam.d]# <span class="type">ln -s mail smtp</span></p>

</td>

</tr>

</table>

<p>系统上可能已经存在了这些文件,请将原来的改名或者删除。</p>

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

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

<p><a

href="http://asg.web.cmu.edu/cyrus/download/">http://asg.web.cmu.edu/cyrus/download/</a></p>

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

<tr>

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

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

href="ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.15.tar.gz">ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.15.tar.gz</a></span></p></td>

</tr>

</table>

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

<p>编译Cyrus-sasl,只支持需要的plain和login认证方式:</p>

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

<tr>

<td> <p>[root@mail src]# <span class="type">tar -zxvf cyrus-sasl-2.1.15.tar.gz</span></p>

<p>[root@mail src]# <span class="type">cd cyrus-sasl-2.1.15</span></p>

<p>[root@mail cyrus-sasl-2.1.15]# <span class="type">./configure --disable-sample

\</span></p>

<p>> <span class="type">--disable-pwcheck --disable-cram --disable-digest

\</span></p>

<p>> <span class="type">--disable-krb4 --disable-gssapi --disable-anon

\</span></p>

<p>><span class="type"> --disable-otp \ </span></p>

<p>> <span class="type">--with-saslauthd=/var/run/saslauthd \</span></p>

<p><span class="type"><font color="#000000">> </font>--enable-plain --enable-login</span></p>

<p></p>

<p>[root@mail cyrus-sasl-2.1.15]#<span class="type">make</span></p>

<p>[root@mail cyrus-sasl-2.1.15]#<span class="type">make install</span></p>

<p></p>

<p>[root@mail cyrus-sasl-2.1.15]# <span class="type">[ -d /usr/lib/sasl2

] && mv /usr/lib/sasl2 /usr/lib/sasl2.orig</span></p>

<p>[root@mail cyrus-sasl-2.1.15]# <span class="type">ln -s /usr/local/lib/sasl2

/usr/lib/sasl2</span></p>

</td>

</tr>

</table>

<p>系统上如果已经安装了SASL 2,请先删除这些RPM或/usr/lib/sasl2这个目录。另外确保你的/usr/lib/sasl2目录中没有login和plain模块外的其他模块,否则容易导致认证失败。</p>

<p></p>

<p>加载链接库:</p>

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

<tr>

<td> <p>[root@mail cyrus-sasl-2.1.15]# <span class="type">echo /usr/local/lib

>> /etc/ld.so.conf</span></p>

<p>[root@mail cyrus-sasl-2.1.15]# <span class="type">echo /usr/local/lib/sasl2

>> /etc/ld.so.conf</span></p>

<p>[root@mail cyrus-sasl-2.1.15]# <span class="type">ldconfig</span></p>

</td>

</tr>

</table>

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

<p>设置Postfix使用SASL的saslauthd认证守护进程来支持smtp auth认证:</p>

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

<tr>

<td> <p>[root@mail cyrus-sasl-2.1.15]# <span class="type">echo pwcheck_method:

saslauthd > /usr/lib/sasl2/smtpd.conf</span></p>

</td>

</tr>

</table>

<p> Cyrus-IMAP的SASL配置不使用标准的sasl语法,它的配置文件放在/etc/imapd.conf中,详细配置在Cyrus-IMAP部分说明。</p>

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

<p>运行saslauthd守护进程,并使其使用pam认证模式来提供认证信息:</p>

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

<tr>

<td> <p>[root@mail cyrus-sasl-2.1.15]# <span class="type">/usr/local/sbin/saslauthd

-a pam</span></p></td>

</tr>

</table>

<p>整个系统使用的认证机制比较复杂。所有的应用(SMTP、IMAP、POP3等)都采用SASL V2的saslauthd来认证;而saslauthd是通过它所支持的PAM模式来借助pam_mysql接口对存储在MySQL数据库中用户信息进行认证的。请参阅上面的系统结构以了解认证流程。</p>

<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">

<tr>

<td> <p>[root@mail cyrus-sasl-2.1.15]# <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>

</table>

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

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

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

<tr>

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

<p>[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>

</table>

<p></p>

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

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

<tr>

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

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

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

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

</td>

</tr>

</table>

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

<p></p>

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

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

<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/local/include/sasl' \</span></p>

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

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

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

</td>

</tr>

</table>

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

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

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

<p></p>

<p>修改系统的别名数据库位置:</p>

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

<tr>

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

<p>[root@mail etc]# <font color="#FF0000">mv aliases aliases.orig</font></p>

<p>[root@mail etc]# <font color="#FF0000">ln -s postfix/aliases aliases</font></p>

</td>

</tr>

</table>

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

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

<tr>

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

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

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

</td>

</tr>

</table>

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

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

<tr>

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

</tr>

</table>

<p></p>

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

<p>修改/etc/postfix/master.cf中的关于cyrus的配置,(cyrus的命令行和以前有不兼容的地方,确保你的cyrus的参数如下使用了-r

${sender}参数):</p>

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

<tr>

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

</td>

</tr>

</table>

<p>将如下两行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> cyrus unix - n n - - pipe

user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}</td>

</tr>

</table>

<p>修改为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> cyrus unix - n n - - pipe

user=cyrus argv=/usr/cyrus/bin/deliver -e -r ${sender} -m ${extension}

${user}</td>

</tr>

</table>

<p>这里要把cyrus的路径修改为你的cyrus实际安装路径(我们下面会将cyrus-imap安装到/usr/cyrus)。 记着user=...这行前面是以空格缩进的。</p>

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

<tr>

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

</td>

</tr>

</table>

<p></p>

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

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

<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></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 = cyrus</p>

<p>fallback_transport = cyrus</p>

<p></p>

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

<p></p>

<p>smtpd_sasl_auth_enable = yes</p>

<p>smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination

reject</p>

<p>broken_sasl_auth_clients = yes</p>

<p>smtpd_sasl_security_options = noanonymous</p>

</td>

</tr>

</table>

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

<p>

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

<p></p>

<p>创建/etc/postfix/mysql-virtual.cf,它提供了本地用户和邮件转发功能。FORWARD字段默认是指向用户的邮箱名的(邮箱名与用户的邮件地址全称类似,只是将“@”换成了“~”),此时邮件本地递交到用户邮箱:USERNAME@mydomain.com里面;FORWARD是另外一个邮件地址或用户时,邮件转发到新的地址。此外,由于Postfix对于邮箱区别大小写,通过virtual功能的重写,可以保证大小写的邮件地址都可以正确接收。</p>

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

<tr>

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

</tr>

</table>

<p></p>

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

<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>

</table>

<p></p>

<p>创建上面指定的/etc/postfix/virtual的DB库:</p>

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

<tr>

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

</td>

</tr>

</table>

<p>保留db格式的virtual库是为了系统添加一些虚拟域和转发方便起见。</p>

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

<p>启动命令如下:</p>

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

<tr>

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

</tr>

</table>

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

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

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

<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>

</table>

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

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

<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>

</table>

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

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

<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>

</table>

<p>使用如下命令测试postfix的SMTP的认证:</p>

<p>PLAIN认证方式:</p>

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

<tr>

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

\</font></p>

<p><font color="#FF0000">> 'print encode_base64("tester\@cngnu.org\0tester\@cngnu.org\0testpw");'</font>

dGVzdGVyQGNuZ251Lm9yZwB0ZXN0ZXJAY25nbnUub3JnAHRlc3Rwdw==</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 dGVzdGVyQGNuZ251Lm9yZwB0ZXN0ZXJAY25nbnUub3JnAHRlc3Rwdw==</p>

<p>235 Authentication successful</p>

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

<p>221 Bye</p>

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

</tr>

</table>

<p>LOGIN认证方式:</p>

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

<tr>

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

\</font></p>

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

<p>dGVzdGVyQGNuZ251Lm9yZw==</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">dGVzdGVyQGNuZ251Lm9yZw==</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></td>

</tr>

</table>

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

<p>这里使用Perl里面的MIME::Base64模块(需要安装,如perl -MCPAN -e 'install MIME::Base64')来取得这个验证串:perl

-MMIME::Base64 -e 'print base64_encode("tester\0tester\0testpw");'来得到MIME-Base64编码的验证串。此外,你也可以使用mmencode来生成,mmencode可以在metamail这个包里面找到。</p>

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

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

<p><a

href="http://asg.web.cmu.edu/cyrus/download/">http://asg.web.cmu.edu/cyrus/download/</a></p>

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

<tr>

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

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

href="ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.1.15.tar.gz">ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.1.15.tar.gz</a>

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

</tr>

</table>

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

<p>编译Cyrus-IMAP,并取消kerberos支持(在Redhat中,kerberos库有问题,很难编译通过,Mandrake则可以通过;此外,我们也不需要kerberos的支持;如果通不过,就指定kerberos的位置--with-krb=/usr/kerberos)和snmp的支持:</p>

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

<tr>

<td> <p>[root@mail src]# <span class="type">tar -zxf cyrus-imapd-2.1.15.tar.gz</span></p>

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

<p></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">./configure --with-cyrus-prefix=/usr/cyrus

\</span></p>

<p>> <span class="type">--with-sasl=/usr/local/lib/sasl2 --with-auth=unix

\ </span></p>

<p>> <font color="#FF0000">--without-ucdsnmp --with-krb=/usr/kerberos</font></p>

<p></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">make depend</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">make all CFLAGS=-O</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">make install</span>

</p>

</td>

</tr>

</table>

<p>如果编译时提示没有找到com_err.h,请复制当前目录的et目录下面的com_err.h到/usr/include:</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">cp et/com_err.h

/usr/include </span></p>

</td>

</tr>

</table>

<p></p>

<p>Cyrus-IMAP的安装脚本有问题,cyradm(现在使用的是Perl版本,原来的TCL版本不再支持)所需要的perl模块被安装到一些不在Perl的@INC的目录里,需要手工安装。</p>

<p></p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">cd perl/imap</span></p>

<p>[root@mail imap]# <span class="type">perl Makefile.PL</span></p>

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

</td>

</tr>

</table>

<p></p>

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

<p>创建主配置文件/etc/cyrus.conf:</p>

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

<tr>

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

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">cp master/conf/small.conf

/etc/cyrus.conf</span></p>

</td>

</tr>

</table>

<p>添加cyrus-imap的管理账号cyrus,并设置密码为“cyrus”(实际应用总可以使用更加复杂的密码),但是没有指定有效的SHELL,以防止使用它来登录:</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">useradd -g mail

-M -s/no/shell cyrus</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">passwd cyrus</span></p>

<p>Changing password for user cyrus</p>

<p>New password: <span class="type">cyrus</span></p>

<p>BAD PASSWORD: it it too short</p>

<p>Retype new password: <span class="style2">cyrus</span></p>

<p>passwd: all authentocation tokens updated successfully</p></td>

</tr>

</table>

<p></p>

<p>创建IMAP配置文件/etc/imapd.conf,管理员是cyrus:</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">vi /etc/imapd.conf</span></p></td>

</tr>

</table>

<p></p>

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

<tr>

<td bgcolor="#FFFFCC">

<p>configdirectory: /var/imap</p>

<p>partition-default: /var/spool/imap</p>

<p>admins: cyrus</p>

<p>sasl_pwcheck_method: saslauthd</p>

<p>sasl_mech_list: PLAIN </p>

<p>unixhierarchysep: yes</p>

<p>altnamespace: yes</p>

</td>

</tr>

</table>

<p>在/etc/imapd.conf中使用了unixhierarchysep: yes的配置可以创建带“.”的邮箱。关于imapd.conf可以参阅Cyrus-IMAP的文档来配置其他可用的参数。</p>

<p></p>

<p>建立Cyrus-IMAP服务器的目录结构:</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">mkdir -p /var/imap/sieve</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">mkdir /var/spool/imap</span></p>

<p></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">chown -R cyrus:mail

/var/imap</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">chown -R cyrus:mail

/var/spool/imap</span></p>

<p></p>

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

<p>bash-2.05$ <span class="type">tools/mkimap</span></p>

<p>bash-2.05$ <span class="type">exit</span></p>

</td>

</tr>

</table>

<p>这里tools/mkimap这个实用程序在cyrus-imap的源程序目录里面。</p>

<p></p>

<p>创建日志:</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">echo local6.debug

/var/log/imapd.log >> /etc/syslog.conf</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">echo auth.debug /var/log/auth.log

>> /etc/syslog.conf</span></p>

<p></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">/etc/rc.d/init.d/syslog

restart</span></p>

</td>

</tr>

</table>

<p>设置邮件限额:</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">chattr -R +S /var/imap/user</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">chattr -R +S /var/imap/quota</span></p>

<p>[root@mail cyrus-imapd-2.1.15]# <span class="type">chattr -R +S /var/spool/imap</span></p>

</td>

</tr>

</table>

<p></p>

<p>由于Cyrus-IMAP的主控进程和Postfix的主控进程名字一样,容易混淆而且不方便控制,所以将Cyrus-IMAP服务器的主控进程做个别名连接:cyrusd。</p>

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

<tr>

<td> <p>[root@mail cyrus-imapd-2.1.15]# <span class="type">cd /usr/cyrus/bin</span></p>

<p>[root@mail bin]# <span class="type">ln -s master cyrusd</span></p>

</td>

</tr>

</table>

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

<p>启动命令如下:</p>

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

<tr>

<td> <p>[root@mail bin]# <span class="type">/usr/cyrus/bin/cyrusd&</span></p></td>

</tr>

</table>

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

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

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

<tr>

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

<p></p>

<p>|-cyrusd</p>

</td>

</tr>

</table>

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

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

<tr>

<td> <p>[root@mail bin]# <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>

</table>

<p></p>

<p>现在创建邮箱。</p>

<p>使用cyradm来创建和删除邮箱,它是Cyrus-IMAP自己带的交互式管理界面,现在的版本是用Perl写的。你也可以直接调用Cyrus::IMAP::Admin模块创建自己的CGI或脚本来做邮箱管理,可以参考Cyrus::IMAP::Shell模块的程序。</p>

<p></p>

<p>

为了支持虚拟域,我们采用了特定的用户邮箱名,用户的邮箱名与其邮件地址的全称很类似,只是将其中的“@”换成了“~”。这是由于,为了将虚拟域用户区别开来,我们希望使用用户的邮件全称来做它的邮箱名(其POP3/IMAP的登录名和邮箱名是一样的),但是虽然Cyrus-IMAP允许你创建带有“@”的邮箱,不过Postfix/smtpd却不支持邮件的本地部分含有@,它会在递交到Cyrus-IMAP的邮箱时,将“@”后面的部分作为域来处理,以至于不能正常递交。</p>

<p>

作为一个变通的方法,我们创建一个将用户邮件地址中的“@”换成“~”的邮箱,并使Postfix/smtpd通过FORWARD重写来递交到这里。首先在cyradm中创建两个信箱,分别是用“@”和“~”分隔的信箱名;然后在文件系统中删除分隔符为“@”的那个信箱目录,并给分隔符为“~”的信箱做个分隔符为“@”的符号链接。(之所以先在cyradm中创建分隔符为“@”的信箱然后在文件系统中删除,是为了让cyrus-imap知道有这样一个信箱。另外请注意,信箱名称中的点实际是用“^”代表的)</p>

<p></p>

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

<tr>

<td> <p>[root@mail bin]# <span class="type">cyradm --user cyrus localhost</span></p>

<p>IMAP Password: </p>

<p>mail.cngnu.org> <span class="type">cm user/cyrus</span></p>

<p>mail.cngnu.org> <font color="#FF0000">sq user/cyrus STORAGE 10240000</font></p>

<p>mail.cngnu.org> <span class="type">cm user/tester~cngnu.org</span></p>

<p>mail.cngnu.org> <span class="type">cm user/tester@cngnu.org</span></p>

<p></p>

<p>mail.cngnu.org> <font color="#FF0000">sq user/tester~cngnu.org STORAGE

10240000</font></p>

<p></p>

<p>mail.cngnu.org> <span class="type">lm</span></p>

<p>user/cyrus (HasNoChildren)user/tester~cngnu.org (HasNoChildren)

user/tester@cngnu.org (HasNoChildren)</p>

<p>mail.cngnu.org> <span class="type">quit</span></p>

<p>[root@mail bin]# cd /var/spool/imap/user</p>

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

<p>cyrus tester~cngnu^orgtester@cngnu^org</p>

<p>[root@mail user]# <span class="type">rm -rf tester@cngnu^org</span> </p>

<p>[root@mail user]# <span class="type">ln -s tester~cngnu^org tester@cngnu^org</span></p>

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

</tr>

</table>

<p>如果要删除一个IMAP邮箱,需要先给管理员cyrus授予C(Create)和D(Delete)的权限才可以删除。</p>

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

<tr>

<td> <p>[root@mail bin]# <span class="type">cyradm --user cyrus localhost</span></p>

<p>IMAP Password: </p>

<p>mail.cngnu.org> <span class="type">cm user/testdel</span></p>

<p>mail.cngnu.org> <span class="type">lm</span></p>

<p>user/cyrus (HasNoChildren)user/tester~cngnu.org (HasNoChildren)

user/tester@cngnu.org (HasNoChildren)user/testdel (HasNoChildren)</p>

<p>mail.cngnu.org> <span class="type">sam user/testdel cyrus cd</span></p>

<p>mail.cngnu.org> <span class="type">dm user/testdel</span></p>

<p>mail.cngnu.org> <span class="type">lm</span></p>

<p>user/cyrus (HasNoChildren)user/tester~cngnu.org (HasNoChildren)

user/tester@cngnu.org (HasNoChildren)</p>

<p></p>

<p>mail.cngnu.org> <span class="type">quit</span></p>

<p>[root@mail bin]# rm -rf /var/spool/imap/user/testdel</p></td>

</tr>

</table>

<p></p>

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

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

<tr>

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

<p>+OK mail.cngnu.org Cyrus POP3 v2.1.15 server ready</p>

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

<p>+OK Name is a valid mailbox</p>

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

<p>+OK Maildrop locked and ready</p>

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

<p>+OK</p>

<p>[root@mail bin]# <span class="type">imtest -m login -a tester@cngnu.org

localhost</span>

C: C01 CAPABILITY

S: * OK mail.cngnu.org Cyrus IMAP4 v2.1.12 server ready

S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID

NO_ATOMIC_RENAME UNSELECT MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES

IDLE

S: C01 OK Completed

Password:

C: L01 LOGIN tester@cngnu.org {6}

+ go ahead

C: <omitted>

L01 OK User logged in

Authenticated.

Security strength factor: 0

<span class="type">. logout</span>

* BYE LOGOUT received

. OK Completed</p>

<p></p></td>

</tr>

</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.php.net/get_download.php?df=php-4.3.2.tar.gz</p>

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

<p>http://www.horde.org/imp/3.2.1/</p>

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

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

<tr>

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

<p>[root@mail src]# <span class="type">wget <a href="http://www.php.net/distributions/php-4.3.2.tar.gz">http://www.php.net/distributions/php-4.3.2.tar.gz</a></span></p>

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

<p>[root@mail src]# <span class="type">wget <a href="ftp://ftp.horde.org/pub/pear/pear-1.0.1.tar.gz">ftp://ftp.horde.org/pub/pear/pear-1.0.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.1.tar.gz">ftp://ftp.horde.org/pub/imp/imp-3.2.1.tar.gz</a></span></p>

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

</td>

</tr>

</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包。编译新的PHP包前请确认系统中存在Apache(这里使用了Apache

2)以及其它相关的软件包。</p>

<p>RedHat的httpd-devel包中没有apache 2用来安装dso模块的脚本:<strong>instdso.sh</strong>,请自行从apache

2.x的发行包中取得,并放入/usr/lib/httpd/build中。</p>

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

<tr>

<td> <p>[root@mail src]# <span class="type">tar zxf php-4.3.2.tar.gz</span></p>

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

<p>[root@mail php-4.3.2]# <span class="type">./configure --prefix=/usr --with-config-file-path=/etc

\ </span></p>

<p>><span class="type"> --with-mysql --with-apxs2 \</span></p>

<p>> <span class="type">--enable-ftp --enable-magic_quotes --with-xml

\</span></p>

<p></p>

<p>><span class="type"> --with-gettext --with-imap \</span></p>

<p>> <span class="type">--with-imap-ssl --with-kerberos=/usr/kerberos</span></p>

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

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

<p>[root@mail php-4.3.2]# <span class="type">[ -f /etc/php.ini ] &&

mv /etc/php.ini /etc/php.ini.orig</span></p>

<p>[root@mail php-4.3.2]# <span class="type">cp php.ini-dist /etc/php.ini</span></p>

</td>

</tr>

</table>

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

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

<tr>

<td bgcolor="#FFFFCC"> <p>register_globals = On</p>

</td>

</tr>

</table>

<p>安装PEAR包:</p>

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

<tr>

<td> <p>[root@mail php-4.3.2]# <span class="type">cd /usr/lib</span><span class="type"></span></p>

<p>[root@mail lib]# <span class="type">[-d php ] && mv php php.orig</span></p>

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

<p>[root@mail lib]# <span class="type">mv pear php</span></p></td>

</tr>

</table>

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

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

<tr>

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

</td>

</tr>

</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">

<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.1.tar.gz</span></p>

<p>[root@mail html]# <span class="type">mv horde-2.2.1 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>

</table>

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

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

<tr>

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

</td>

</tr>

</table>

<p>修改148行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$conf['prefs']['driver'] = 'none';</p>

</td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$conf['prefs']['driver'] = 'sql';</p></td>

</tr>

</table>

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

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

<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>

</table>

<p>为:</p>

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

<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>

</table>

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

<p></p>

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

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

<tr>

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

</tr>

</table>

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

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

<tr>

<td bgcolor="#FFFFCC"> <p>// $this->registry['auth']['login'] = 'imp';

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

</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$this->registry['auth']['login'] = 'imp';

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

</p></td>

</tr>

</table>

<p>然后修改109、118行激活IMP和Turba:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p> 'status' => 'inactive'

</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p> 'status' => 'active'

</p></td>

</tr>

</table>

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

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

<tr>

<td bgcolor="#FFFFCC"> <p>http://你的IMP服务器的IP/horde/test.php</p></td>

</tr>

</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">

<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.1.tar.gz</span></p>

<p>[root@mail horde]# <span class="type">mv imp-3.2.1 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>

</table>

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

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

<tr>

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

</tr>

</table>

<p>修改37行:</p>

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

<tr>

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

</tr>

</table>

<p>为:</p>

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

<tr>

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

</tr>

</table>

<p>修改57行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$conf['user']['allow_resume_all'] = false;</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$conf['user']['allow_resume_all'] = true;</p></td>

</tr>

</table>

<p>修改63行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$conf['user']['allow_resume_all_in_drafts'] = false;</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>$conf['user']['allow_resume_all_in_drafts'] = true;</p></td>

</tr>

</table>

<p></p>

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

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

<tr>

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

</tr>

</table>

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

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

<tr>

<td bgcolor="#FFFFCC"> <p> 'value' => 1,

'locked' => false,

</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p> 'value' => 0,

'locked' => true,

</p></td>

</tr>

</table>

<p>再注释773行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>'value' => '',</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>//'value' => '',</p></td>

</tr>

</table>

<p>取消注释774行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>// 'value' => 'localsql',</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>'value' => 'localsql',</p></td>

</tr>

</table>

<p></p>

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

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

<tr>

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

</tr>

</table>

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

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

<tr>

<td bgcolor="#FFFFCC"> <p> $servers['cyrus'] = array(

'name' => 'Cyrus IMAP Server',

'server' => 'localhost',

'protocol' => 'imap/notls',

'port' => 143,

'folders' => '',

'namespace' => 'INBOX.',

'maildomain' => 'cngnu.org',

'realm' => 'cngnu.org',

'preferred' => ''

);

</p>

</td>

</tr>

</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">

<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.tar.gz</span></p>

<p>[root@mail horde]# <span class="type">mv turba-1.2 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>

</table>

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

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

<tr>

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

</tr>

</table>

<p>修改32行:</p>

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

<tr>

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

</tr>

</table>

<p>为:</p>

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

<tr>

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

</tr>

</table>

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

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

<tr>

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

</tr>

</table>

<p>修改140行:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>'password' => '*****';</p></td>

</tr>

</table>

<p>为:</p>

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

<tr>

<td bgcolor="#FFFFCC"> <p>'password' => 'horde';</p></td>

</tr>

</table>

<p>

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

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

<tr>

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

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

</tr>

</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">

<tr>

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

</tr>

</table>

<p>输入用户名tester@cngnu.org和密码testpw登录。</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>可以编写一个启动脚本mailsys来启动这些进程,这样就不需要单独启动postfix和cyrusd了:</p>

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

<tr>

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

#

# mailsys This shell script takes care of starting and stopping

# Postfix and Cyrus-IMAP.

# author : xingyu.wang <wxy@cngnu.org> 2003/2/5

#

# chkconfig: 2345 80 30

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

# that moves mail from one machine to another.Cyrus-IMAP is a Mail

# Deliver Agent, which provide POP3 and IMAP4 services for user and

# deliver mail to local mailbox.

#

# processname: mailsys

# pidfile: /var/run/mailsys.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

[ -f /usr/cyrus/bin/cyrusd ] || exit 0

RETVAL=0

prog="Mail System"

start() {

# Start daemons.

echo -n $"Starting $prog: "

echo -n $"SASL "

/usr/local/sbin/saslauthd -a pam

echo -n $"SMTP "

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

echo -n $"POP3 IMAP4 "

/usr/cyrus/bin/cyrusd > /dev/null 2>&1 &

RETVAL=$?

if [ $RETVAL -eq 0 ]; then

touch /var/lock/subsys/mailsys

success $"$prog start"

else

failure $"$prog start failure"

fi

echo

return $RETVAL

}

stop() {

# Stop daemons.

echo -n $"Shutting down $prog: "

echo -n $"SMTP "

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

echo -n $"POP3 IMAP4 "

killproc cyrusd

echo -n $"SASL "

killproc saslauthd

RETVAL=$?

if [ $RETVAL -eq 0 ]; then

rm -f /var/lock/subsys/mailsys

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>

</table>

<p></p>

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

<tr>

<td> <p>[root@mail root]# chmod 755 /etc/rc.d/init.d/mailsys</p>

<p>[root@mail root]# cd /etc/rc3.d</p>

<p>[root@mail rc3.d]# ln -s ../init.d/mailsys S80mailsys</p>

<p>[root@mail rc3.d]# rm -rf S80sendmail</p>

</td>

</tr>

</table>

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

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

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

<tr>

<td> <p>[root@mail root]# <span class="type">mail tester@cngnu.org</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/mail/*</span></p>

<p></p></td>

</tr>

</table>

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

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

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

<tr>

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

<p>+OK mail.cngnu.org Cyrus POP3 v2.1.15 server ready</p>

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

<p>+OK Name is a valid mailbox</p>

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

<p>+OK Maildrop locked and ready</p>

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

<p>1 400</p>

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

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

X-Sieve: cmu-sieve 2.0

Return-Path: <root@cngnu.org>

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

id 5F1EF90005; Mon, 20 May 2002 18:03:43 +0800 (CST)

To: tester@cngnu.org

Subject: test by me

Message-Id: <20020520100343.5F1EF90005@mail00.cngnu.org>

Date: Mon, 20 May 2002 18:03:43 +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>

</table>

<p>再测试IMAP:</p>

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

<tr>

<td> <p>[root@mail root]# <span class="type">imtest -m login -a tester@cngnu.org

localhost </span>

C: C01 CAPABILITY

S: * OK mail.cngnu.org Cyrus IMAP4 v2.1.15 server ready

S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID

NO_ATOMIC_RENAME UNSELECT MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES

IDLE

S: C01 OK Completed

Password:

C: L01 LOGIN tester {6}

+ go ahead

C: <omitted>

L01 OK User logged in

Authenticated.

Security strength factor: 0</p>

<p><span class="type">. select inbox</span>

* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)

* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]

* 1 EXISTS

* 1 RECENT

* OK [UIDVALIDITY 1021736432]

* OK [UIDNEXT 3]

. OK [READ-WRITE] Completed</p>

<p><span class="type">. fetch 1:1 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])</span>

* 1 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {68}

Date: Mon, 20 May 2002 09:26:09 +0800 (CST)

From: wxy@cngnu.org</p>

<p>)

. OK Completed

<span class="type">. logout</span>

* BYE LOGOUT received

. OK Completed</p></td>

</tr>

</table>

<p></p>

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

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

<tr>

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

</tr>

</table>

<p>输入用户名tester@cngnu.org和密码testpw登录。</p>

<p></p>

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

<p></p>

<p>OK,到此为止,我们的邮件系统就架设完毕了。如果有任何问题,请到<a href="http://anti-spam.org.cn/forums/index.php?showforum=6">http://www.anti-spam.org.cn/forums/</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- 王朝網路 版權所有