学习情境2.6 Sendmail电子邮件服务架设
2.6.1 学习要点
知识点:理解电子邮件系统的组成和工作原理,熟悉电子邮件相关协议
技能点:理解Sendmail的结构和处理过程,学会配置邮件服务器,并测试发送与接收邮件
2.6.2 任务描述
Sendmail电子邮件服务的安装配制
安装Sendmail软件,添加sasl认证,建立两个用户y1,y2,y3,密码均为123456,y1与y2账户互发邮件均能成功。限制最大邮件为10M,建立群发别名qf包含y1,y2,y3
2.6.3 相关知识
1.电子邮件系统
在UNIX系统的用户中,Sendmail是应用最广的电子邮件服务器。Sendmail作为一种免费的邮件服务器软件,已被广泛的应用于各种服务器中,它在稳定性、可移植性及确保没有BUG等方面具有一定的特色,且可以在网络中搜索到大量的使用资料。
如果使用Sendmail来构建网站的电子邮件系统,基本上不必费心,因为几乎所有的UNIX的缺省配置中都内置这个软件,只需要设置好操作系统,它就能立即运转起来。
本情境利用Sendmail配置成邮件服务器,可以对邮件进行发送和接收。
(1)电子邮件地址和电子邮箱
电子邮件地址有两部分组成,第一部分标识用户的邮箱,第二部分标识计算机,用@分开。
将电子邮件划分两部分的目的:
发送方的电子邮件软件使用第二部分来选择目的地,接收方的电子邮件软件使用第一部分来选择指定的邮箱。
(2)电子邮件格式
信封、内容—报头(规定邮件格式)、报文。
(3)电子邮件系统的组成
电子邮局系统(MTA);
电子邮件发送、接收系统(MUA)。
(4)电子邮件系统的工作原理(如图2.6.1所示)

图2.6.1 电子邮件系统的工作原理
(5)电子邮件系统与DNS的结合
MX邮件交换记录告知MTA将邮件传递到何处。
(6)邮件中继
当邮件向目的地址传输时,一旦原地址和目的地址都不是本地系统,就会发生中继。
2.电子邮件相关的协议
(1)SMTP(简单邮件传输协议)
在整个电子邮件系统中,有两处需要使用SMTP,发送邮件的MUA,MTA建立连接并发送邮件MTA之间使用SMTP进行电子邮件的转发。
(2)多用途互联网邮件扩充
多种(二进制数据)编码方案的MIME(多用途互联网邮件扩充)技术。
(3)邮件接收客户访问邮件的方式
邮件接收者对邮件服务器的请求访问模式有:离线、在线和断线3种模式。
(4)POP3(邮局协议)
POP协议要检测用户的登陆名和口令,然后将用户的邮件从服务器移动到用户本地桌面系统的MUA中。当前使用的POP协议的版本是POP3,它监听TCP的110端口。
(5)IMAP4(互联网消息协议)
IMAP是POP的替代品,增加了对邮箱同步的支持,当前使用的IMAP协议的版本是IMAP4,它监听TCP的143端口。
3.Sendmail的简介
(1)Sendmail的功能
接收SMTP邮件;
为邮件选择路由;
传输SMTP邮件;
使用邮件别名,从而允许使用邮件列表;
错误检测以及速度和代价优化。
(2)Sendmail的结构和处理过程
Sendmail的工作方式是根据用户的电子邮件地址,为用户的邮件选择一条到达适当的传输程序的路由。
4.安装和启动imap
(1)安装imap
RedHat AS 5中提供了imap的RPM包cyrus-imapd-2.3.7-2.el5.i386.rpm,包括POP和 IMAP两种协议的程序。
从安装光盘上拷贝db4-utils-4.3.29-9.fc6.i386.rpm,cyrus-imapd名字开头的几个软件包传到本地的Linux服务器上

(2)启动cyrus-imapd邮件接收服务
①启动cyrus-imapd服务
#/etc/init.d/cyrus-imapd start
结果如下:
导入cyrus-imapd数据库: [确定]
启动cyrus-imapd: [确定]
②查看imap与pop3的服务端口
查看imapd的143服务端口:
#netstat-an|grep 143
结果如下:
![]()
查看imapd的110服务端口:
#netstat-an|grep 110
结果如下:
![]()
现在电子邮件的接收服务已经正常启动
5.smtp的身份认证
(1)检查所需的包是否已经安装好
要在RHEL5里使用SMTP认证,需要安装Sendmail和cyrus-sasl,这两个包在RHEL5安装时默认应该都是安装好了的,如果你在使用RedHat或其他的Linux版本,请检查这两个包是否已经装好。
(2)我们来改一下几个配置文件
①先来看一下/usr/lib/sasl2/Sendmail.conf文件,里面的内容应该是pwcheck_method:sas⁃lauthd,意思是说Sendmail的密码验证方法是经过加密处理方式。将这个文件复制成smtpd.conf。
![]()
②启动sasl的密码认证服务
#/etc/init.d/saslauthd start
6.sendmail的配置
Sendmail运行会读取后缀为cf的配置文件。后缀为cf的配置文件的配置语法相当复杂,因此没有人试图自己重新完整地编写cf配置文件。幸运的是可以使用间接的方法来生成cf配置文件,即可以先编写后缀为mc的宏配置文件,然后由通用工具m4将宏配置文件转换为cf配置文件。
(1)RedHat AS 5中/etc/mail/Sendmail.mc的配置修改
![]()
文件总共176行,找到52,53行。
dnl#Please remember that saslauthd needs to be running for AUTH.
dnl#
dnl TRUST_AUTH_MECH(‘EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
dnl define(‘confAUTH_MECHANISMS’,‘EXTERNAL GSSAPI DIGEST-MD5 CRAMMD5 LOGIN PLAIN’)dnl
dnl#
dnl#Rudimentary information on creating certificates for sendmail TLS:
其中上述灰色的文字部分就是要修改之处,把这两行的dnl去掉,变成如下:
TRUST_AUTH_MECH(‘EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
define(‘confAUTH_MECHANISMS’,‘XTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl
dnl是delete直到下一个换行为止,也就是不处理的注解或是程序输出的空行,在define后通常会自动产生空行。
上述把dnl消掉就是让Sendmail支持SMTP认证。
再找到116行
dnl#address restriction to accept email from the internet or intranet.
dnl#
DAEMON_OPTIONS(‘Port=smtp,Addr=127.0.0.1,Name=MTA’)dnl
dnl#
dnl#The following causes sendmail to additionally listen to port 587 for其中上述灰色的文字部分就是要修改之处,修改成如下结果:
DAEMON_OPTIONS(‘Port=smtp,Addr=0.0.0.0,Name=MTA’)dnl
目的是让Sendmail的25 SMTP服务端口由默认的127.0.0.1地址改变为本机所有的IP地址,这是让Sendmail监听在全部网络端口上,而不是只监听在本地的127.0.0.1的环回地址上。
文件的最后三行
MAILER(smtp)dnl
MAILER(procmail)dnl
dnl MAILER(cyrusv2)dnl
其中灰色的这行注释掉,目的是不让procmail邮件服务起作用,修改如下:
#MAILER(procmail)dnl
然后在文件的末尾添加这三行:
define(‘CYRUSV2_MAILER_ARGS’,‘FILE/var/lib/imap/socket/lmtp’)
define(‘confLOCAL_MAILER’,‘cyrusv2’)
MAILER(cyrusv2)
其目的是设置由Cyrus-IMAPd接收信件。
(2)生成Sendmail的数据文件Sendmail.cf
#m4/etc/mail/Sendmail.mc>/etc/mail/Sendmail.cf
(3)编辑local-host-names本地主机名
#vim/etc/mail/local-host-names
这个文件主要用来处理一个主机同时拥有多个主机名时候的收发信件主机名问题。
在文件中加入本服务器的域名,如test.com。
(4)创建用户的Mailbox
①运行下面的命令(注:cyrus为系统安装cyrus包时创建的用户,localhost换成你的机器名,cyradm在cyrus-imapd-utils包中)
cyradm—user cyrus—auth login localhost,这时会提示你输入用户cyrus的密码,输入正确密码后将进入提示符,类似:
你的机器名>
②用cm使用为用户创建mailbox
格式:cm user.用户名
例如为用户test创建mailbox:cm user.test。
至此,mailbox已创建,看看此时是否能够收到邮件了。
(5)启动sendmail服务
/etc/init.d/sendmail start
7.Sendmail配置文件的使用
(1)限制接受信件的大小为2M:
修改/etc/mail/sendmail.cf文件,在文件的最底端加上这么一行:
O MaxMessageSize=2000000
单位是字节。
(2)设置账户的别名
别名是Sendmail最重要的功能之一,能利用别名来保护登陆账号,保护合法用户的账号不被泄露。
修改/etc/aliases文件:
#vim/etc/aliases
文件格式如下:
webmaster: winston
第一栏为别名,第二栏为真正的帐号。如果要指定多个别名,用户名之间用逗号加以隔开
如为webmaster一个别名指定好几个用户。
webmaster: root,cassia
建好别名后需使其生效,使用newaliases命令。
newaliases命令从/etc/aliases文件构建一个别名数据库的新副本。每次该文件更改的时候都必须运行这条命令,这样所做的更改才能生效。
#newaliases
运行后结果如下:
/etc/aliases:77 aliases,longest 17 bytes,786 bytes total
表明一共有77个别名,总共786字节。
2.6.4 任务实施
Sendmail电子邮件服务的安装配制
(1)安装Sendmail软件
(2)添加sasl认证
(3)建立两个用户y1,y2,y3,密码均为123456,y1与y2账户互发邮件均能成功
(4)限制最大邮件为10M
(5)建立群发别名qf包含y1,y2,y3
任务步骤如下:
1.安装和启动imap
(1)从安装光盘上拷贝db4-utils-4.3.29-9.fc6.i386.rpm,cyrus-imapd名字开头的几个软件包传到本地的Linux服务器上
(2)安装cyrus-imapd软件包
#rpm-ivh db4-utils-4.3.29-9.fc6.i386.rpm
//安装db4-utils软件rpm包
#rpm-ivh cyrus-imapd-perl-2.3.7-2.el5.i386.rpm
//安装cyrus-imapd-perl软件rpm包
#rpm-ivh cyrus-imapd-utils-2.3.7-2.el5.i386.rpm
//安装cyrus-imapd-utils软件rpm包
#rpm-ivh cyrus-imapd-2.3.7-2.el5.i386.rpm
//安装cyrus-imapd软件rpm包
启动cyrus-imapd服务
#/etc/init.d/cyrus-imapd start
结果如下
导入cyrus-imapd数据库: [确定]
启动cyrus-imapd: [确定]
2.启动saslauthd的电子邮件SMTP认证服务
(1)编辑saslauthd的Sendmail.conf配置文件
![]()
(2)启动sasl的密码认证服务
(3)启动saslauthd的SMTP认证方式
#/etc/init.d/saslauthd start
结果如下:
启动saslauthd: [确定]
3.修改Sendmail的文件配置
(1)Sendmail.mc文件的修改
参考正文2.6.3相关知识的第6大点Sendmail的配置的(1)RedHat AS 5中/etc/mail/Sendmail.mc的配置修改方法
(2)编辑local-host-names本地主机名
#vim local-host-names
Sl232.cn
这里sl232.cn是本机的dns域名。
4.创建用户的Mailbox
(1)创建系统用户y1,y2,y3

(2)创建用户的邮箱
①为系统用户cyrus改密码
查看用户cyrus
#finger cyrus//查询cyrus的基本资料
结果如下

Cyrus是安装cyrus-imap软件包时系统自动创建的邮件管理用户。
#passwd cyrus//修改cyrus用户密码
②创建y1,y2,y3用户邮箱

5.启动邮件服务器测试
(1)启动Sendmail
#/etc/init.d/Sendmail start
启动Sendmail: [确定]
启动sm-client: [确定]
(2)在Windows下用Foxmail测试邮件收发
安装Foxmail邮件客户端,注意填写SMTP,POP3邮件服务器地址,比如域名为sl232.cn,则SMTP地址就是SMTP.sl232.cn,POP3地址就是POP3.sl232.cn。
测试y1,y2,y3用户的邮件互发。
6.修改默认邮件大小10M
修改/etc/mail/sendmail.cf文件:
#vim/etc/mail/sendmail.cf
在文件的最底端加上这么一行:
O MaxMessageSize=10000000
单位是字节。
7.建立邮件别名
修改/etc/aliases文件:
#vim/etc/aliases
在文件末尾添加一行:
qf:y1,y2,y3
使用newaliases命令让其别名生效,:
#newaliases
8.Sendmail的相关服务管理
用chkconfig指令来管理Sendmail相关服务,在开机进入系统就启动服务
(1)cyrus-imapd服务
在系统启动模式3与5下开启cyrus-imapd服务
#chkconfig cyrus-imapd—level 35 on
查询cyrus-imapd的服务状况:
#chkconfig—list|grep cyrus-imapd
结果如下:
cyrus-imapd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
(2)saslauthd服务
在系统启动模式3与5下开启saslauthd服务
#chkconfig saslauthd —level 35 on
查询saslauthd的服务状况:
#chkconfig—list|grep sasl
saslauthd 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
(3)Sendmail服务
在系统启动模式3与5下开启Sendmail服务:
#chkconfig Sendmail —level 35 on
查询Sendmail的服务状况:
#chkconfig—list|grep Sendmail
Sendmail 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
2.6.5 考核要点
表2.6.1 Sendmail电子邮件服务考核标准

2.6.6 能力拓展
1.POP3协议采用(1)模式,当客户机需要服务时,客户端软件(Outlook Express或Foxmail)与POP3服务器建立(2)连接。
(1)A.Browser/Server B.Client/Server
C.Peer to Peer D.Peer to Server
(2)A.TCP B.UDP
C.PHP D.IP
2.SMTP使用的传输层协议为(3)。
(3)A.HTTP B.IP C.TCP D.UDP
3.下列说法错误的是______。
A.电子邮件是Internet提供的一项最基本的服务
B.电子邮件具有快速、高效、方便、价廉等特点
C.通过电子邮件,可向世界上任何角落的网上用户发送信息
D.可发送的多媒体只有文字和图像
4.当电子邮件在发送过程中有误时,则______。
A.电子邮件服务器将自动把有误的邮件删除
B.邮件将丢失
C.电子邮件服务器会将原邮件退回,并给出不能寄达的原因
D.电子邮件服务器会将原邮件退回,但不给出不能寄达的原因
5.电子邮件地址的一般格式为____。
A.用户名@域名 B.域名@用户名
C.IP地址@域名 D.域名@IP地址名
6.以下选项中_____不是设置电子邮件信箱所必需的。
A.电子信箱的空间大小 B.账号名
C.密码 D.接收邮件服务器
7.POP3服务器用来_____邮件。
A.接收 B.发送 C.接收和发送 D.以上均错
8.在Outlook Express窗口中,新邮件的“抄送”文本框输入的多个电子信箱的地址之间应用_____作分隔。
A.分号(;) B.逗号(,) C.冒号(:)D.空格

