| 关键词: sendmail 信件 邮件 mail qpopper 服务器 root email LinuxAID 用户 |
摘要 人们在互联网上最常使用的就是电子邮件,很多企业用户也经常使用免费电子邮件系统。本文就以step by step的方式引导用户从sendmail源代码开始构建一个可以满足基本工作需要的邮件系统。(2002-07-05 08:28:13) -------------------------------------------------------------------------------- By lanf, 出处:出自 LinuxAID ideal 概述 sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理用来接受用户的指令,将用户的信件传送至信件传输代理,如:outlook express、foxmail等。而投递代理则从信件传输代理取得信件传送至最终用户的邮箱,如:procmail。 当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用户代理必须试图去寻找一个信件传输代理,把邮件提交给它。信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, 并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者察看自己的电子信箱。 显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件(发送邮件不受这个限制)。可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 提交给最终投递程序。 有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置十分复杂,因此,也有人使用另外的一些工具,如qmail、postfix等等。 当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递给对应的服务器,这是通过DNS服务实现的。例如一封邮件的目标地址是[email protected],那么sendmail首先确定这个地址是用户名(ideal)+机器名(linuxaid.com.cn)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。 DNS数据中,与电子邮件相关的是MX记录,例如在linuxaid.com.cn这个域的dns数据文件中有如下设置: IN MX 10 mail IN MX 20 mail1 mail IN A 202.99.11.120 mail1 IN A 202.99.11.121 显然,在DNS中说明linuxaid.com.cn有两个一个信件交换(MX)服务器,于是,sendmail试图将邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务 器将试图连接mail.linuxaid.com.cn的25端口,试图将信件报文转发给它。如果成功,你的smtp服务器的任务就完成了,在这以后的任务,将由mail.linuxaid.com.cn来完成。在一般的情况下,mail换器会自动把信件内容转交给目标主机,不过,也存在这样的情况,目标主机(比如linuxaid.com.cn)可能并不存在,或者不执行smtp服务,而是由其mx交换器来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。 如果DNS查询无法找出对某个地址的MX记录(通常因为对方没有信件交换主机),那么sendmail将是试图直接与来自邮件地址的主机对话并且发送邮件。例如,[email protected]中没有对应的MX记录,因此sendmail在确定MX交换器失败后,将从DNS取得对方的IP地址并直接和对方对话试图发送邮件。 工作环境 本文假设用户希望在园区网环境中架设一个电子邮件服务器,为本单位用户提供邮件服务。该服务器拥有一个合法的IP地址202.99.11.200和一个合法的域名mail.linuxaid.com.cn,并且DNS的MX记录也指向该域名(注:这里示例域名和IP地址均为伪造域名和地址)。为了满足域名需求,DNS的域数据文件应该包含以下内容: IN MX 10 mail mail IN A 202.99.11.200 试验环境为:redhat6.2、sendmail.8.11.4、qpopper4.0.3。 软件下载 分别从以下地址下载sendmail和qpopper: sendmail.8.11.4.tar.gz http://www.sendmail.org/current-release.html qpopper4.0.3.tar.gz http://www.eudora.com/qpopper_general/ Sendmail的配置和安装 Sendmail是目前使用最为广泛的一种E-mail服务器。当前其最新的稳定版本为8.11.4。下载得到tar.gz格式的压缩包以后,将其存放在/usr/src目录下。 解压软件包: [root@email src]# tar xvfz sendmail.8.11.4.tar.gz [root@email src]# cd sendmail-8.11.4 编译安装: [root@email sendmail-8.11.4]# cd sendmail [root@email sendmail]# sh Build 生成配置文件: [root@email sendmail]#cd /usr/src/sendmail-8.11.4/cf/cf/ 一般该目录下应该有config.mc的文件,如果没有则创建新文件config.mc,内容为: divert(-1) dnl This is the macro config file used to generate the /etc/sendmail.cf dnl file. If you modify thei file you will have to regenerate the dnl /etc/sendmail.cf by running this macro config through the m4 dnl preprocessor: dnl m4 /etc/sendmail.mc > /etc/sendmail.cf dnl You will need to have the Sendmail-cf package installed for this to work. include(`/usr/src/sendmail-8.11.4/cf') define(`confDEF_USER_ID',`8:12') OSTYPE(`linux') undefine(`UUCP_RELAY') undefine(`BITNET_RELAY') define(`confAUTO_REBUILD') define(`confTO_CONNECT', `1m') define(`confTRY_NULL_MX_LIST',true) define(`confDONT_PROBE_INTERFACES',true) define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail') FEATURE(`smrsh',`/usr/sbin/smrsh') FEATURE(`mailertable',`hash -o /etc/mail/mailertable') FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable') FEATURE(redirect) FEATURE(always_add_domain) FEATURE(use_cw_file) FEATURE(local_procmail) MAILER(smtp) MAILER(procmail) FEATURE(`access_db') FEATURE(`blacklist_recipients') dnl We strongly recommend to comment this one out if you want to protect dnl yourself from spam. However, the laptop and users on computers that do dnl not hav 24x7 DNS do need this. FEATURE(`accept_unresolvable_domains') dnl FEATURE(`relay_based_on_MX') 然后运行: [root@email cf]# sh Build config.cf 该命令将在该目录下生成config.cf文件。然后安装sendmail: [root@email sendmail]# sh Build install 将config.cf拷贝到/etc/mail目录下,并改名为sendmail.cf: [root@email mail]#cp /usr/src/sendmail-8.11.4/cf/cf/config.cf /etc/mail/sendmail.cf 在/etc/mail目录下创建access文件,内容如下: 127.0.0.1 RELAY 202.99.11 RELAY 这里表示允许本机和202.99.11.0网段中的机器通过该邮件服务器的转发邮件。其中202.99.11应该是你拥有的局域网络IP网段的IP地址,只需要写网络部分即可。比如说你的用户有多个网段,只需要在其中设置多个网段即可: 127.0.0.1 RELAY 202.99.11 RELAY 200.200.201 RELAY 然后对access文件生成易于检索的库文件格式: [root@email mail]# makemap hash access.db < access 创建文件/etc/mail/local-host-names,其内容为本机的拥有的域名信息,因为在上面的DNS配置文件中该服务器有一个域名:email.linuxaid.com.cn,并且MX记录也指向该域名,因此该服务器就有两个域名,一个为email.linuxaid.com.cn及linuxaid.com.cn,这样用户才可以使用[email protected].这样的地址收发邮件,故该文件应该包含入下内容: linuxaid.com.cn. mail.linuxaid.com.cn. 最后还要创建别名数据库。在/etc/mail/aliases目录下创建文件aliases,内容如下: MAILER-DAEMON: postmaster postmaster: root bin: root daemon: root nobody: root 然后生成aliases库: [root@email mail]# newaliases 然后,就可以启动Sendmail了: [root@email mail]# /usr/sbin/sendmail -bd -q20m 在第一次启动时可能出现如下的错误信息: 554 5.0.0 /etc/mail/sendmail.cf: line 41: unknown configuration line "" 554 5.0.0 /etc/mail/sendmail.cf: line 60: unknown configuration line "" 不要紧张,只需要使用vi编辑器将这些行删除即可,其实41、60等行都是空白行而已。删除以后再重新启动就应该没有问题了。 qpopper的安装配置 qpopper是Unix/Linux环境下的pop3服务器,该软件配合sendmail使用。其主要是实现支持用户通过pop3接收信件。 创建从/usr/mail指向/var/spool/mail/的链接: [root@email src]# ln -s /var/spool/mail/ /usr/mail 解压qpopper软件包: [root@email src]# tar xvfz qpopper4.0.3.tar.gz [root@email src]# cd qpopper4.0.3 编译安装qpopper: [root@email qpopper4.0.3]# ./configure [root@email qpopper4.0.3]# make [root@email qpopper4.0.3]# make install 安装成功以后,qpopper将会被安装在目录/usr/local/sbin/目录下。设置inetd启动qpopper。编辑/etc/inetd.conf,查找pop内容的一行,在其前面添加#号,然后在改行后面添加入下内容: pop-3 stream tcp nowait root /usr/local/sbin/popper qpopper -s 然后查找inetd进程ID号: [root@email qpopper4.0.3]# ps ax|grep inetd 336 ? S 0:00 inetd 16872 pts/0 S 0:00 grep inetd 找到inetd进程号为226。然后重新启动inetd进程,重新读取配置文件: [root@www qpopper4.0.3]# kill -HUP 336 这时候查看系统服务端口号: [root@email qpopper4.0.3]# netstat -ln|grep 110 tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 则说明110端口已经开始正常 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|