25.1 sendmail概述
25.1.1 sendmail基本概念
发信服务器:smtp
收信服务器: pop/imap
MTA:邮件传输代理,邮件server的总称。
MUA:邮件用户代理,收信的客户端软件的总称。(oe/foxmail) 就是收受邮件主机的电子邮件,以及提供使用者浏览与编写邮件的功能。
25.1.2 邮件格式
From:tom@koumm.com
To:jack@koumm.com
Subject to :hi
Body:welcome to here!
25.2 sendmail安装
25.2.1 rpm包安装sendmail
Sendmail默认已经安装好了,只能在主机上,以及主机上的用户之间收发电子邮件,不能通过邮件域名,以及pop3功能收发电子邮件,如果需要使用其它功能还需要对sendmail进行配置。
1.安装sendmail工具
rpm -q sendmail
rpm -q sendmail-cf
rpm -q sendmail-doc
rpm -qa |grep sasl
cyrus-sasl-lib-2.1.21-10
cyrus-sasl-devel-2.1.21-10
cyrus-sasl-plain-2.1.21-10
cyrus-sasl-2.1.21-10
2.M4工具安装
rpm -qa |grep m4 /*检查m4工具的安装*/
m4-1.4.4-1.2.1 /*默认情况下该工具没有安装,需要安装才能对sendmail进行其它配置,非常关键与重要。*/
3.准备dns资源记录
详细请见18.2.4自定义区域文件
25.2.2 pop3/imap安装
1.redhat linux9的pop3/imap安装
rpm -q dovecot
dovecot-1.0-0.beta2.7
#默认的情况下pop/imap服务的功能没有安装,需要另外安装才行,对于FC/Redhat服务器版式的pop服务器,需要安装以上文件包。由于以上文件包有一定的软件依赖性,需要先安装perl再安装mysql,才能无错误提示安装dovecot软件包。
25.2.3 sendmail服务启动
Sendmail服务是独立方式来进行启动的。Sendmail服务的启动需要可以通过以下方式来进行。
chkconfig sendmail on
service sendmail start
sendmail -bd –q12h
后跟的参数解释如下:
-b:设定Sendmail服务运行于后台。
-d:指定Sendmail以Daemon(守护进程)方式运行。
-q:设定当Sendmail无法成功发送邮件时,就将邮件保存在队列里,并指定保存时间。上面的12h表示保留12小时。
25.3 sendmail邮件配置
25.3.1 sendmail配置文件介绍
rpm -qc sendmail
/etc/mail/access /*允许转发的域名与IP地址*/
/etc/mail/local-host-names /*域名后缀*/
/etc/mail/sendmail.cf /*sendmail配置文件*/
/etc/mail/sendmail.mc /*sendmail模板文件*/
/etc/rc.d/init.d/sendmail /*sendmail服务启动脚本*/
25.3.2 /etc/mail/access
/etc/mail/access中加入允许sendmail进行中继或转发的邮件的域名与地址。否则sendmail不会把该邮件进行转发出去。默认只有127.0.0.1即是本地邮件进行转发,所以需要修改以下文件。
vi /etc/mail/access
192.168.1 RELAY
mail.koumm.com RELAY
koumm.com RELAY
localhost RELAY
127.0.0.1 RELAY
localhost.localdomain RELAY
修改完以后还需要对以上文件进行hash编码才行。
Makemap hash access.db < access
25.3.3 /etc/mail/local-host-names
/etc/mail/local-host-names是申明sendmail可以为哪几个域发送电子邮件。
vi /etc/mail/local-host-names
koumm.com
mail.koumm.com
abc.com
#sendmail可以为哪几个域服务。
25.3.4 /etc/mail/sendmail.cf
/etc/mail/sendmail.cf是sendmail的配置文件,该文件是由sendmail.mc模板文件创建而成的,为了实现非本机的SMTP/POP/IMAP收发功能。需要修改该模板文件,然后再由模板文件创建配置文件。
vi /etc/mail/sendmail.mc
1. 用户邮件的大小限制
原来限制为2MB,建议改为20MB,注意这里容量单位为字节,2000000=2M,20000000=20M
define(`UUCP_MAILER_MAX', `20000000')dnl
2. 邮箱接收邮件的地址范围
原来该命令行中地址为127.0.0.1,这样只能收本机系统产生的邮件,改为通配地址0.0.0.0,表示允许任意地址的计算机通过此邮件服务器发送邮件,或根据具体情况修改,必须要修改,否则pop发送功能不能实现。
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0,Name=MTA' )dnl
3. 设置本地邮箱的域名
默认是localhost.localdomain,在outlook中输入用户邮箱时会自动显示本域名信息,需要修改为本地域名地址。
LOCAL_DOMAIN(`koumm.com')dnl
dnl MASQUERADE_AS(`koumm.com')dnl
m4 sendmail.mc > sendmail.cf /*通过模板生成配置文件*/
25.3.5 邮件别名
一般情况下,电子邮件出现问题的时候,我们需要把出错的邮件头发送到本机的postmaster用户,但是也许你的系统上有多个系统管理员,因此每个人都需要得到一份这个邮件头的拷贝。这种情况下就需要使用用户别名文件了。
创建别外文件,也就是可以为哪些用户代收邮件的功能。
makemap hash aliases.db < aliases
#生成数据库文件,以后面添加别名用户做准备。
1.一般别名
aliases文件的格式是 邮件别名:实际用户名
如果一个别名有多个用户就用逗号分开,每个别名一行。
postmaster:supervisor,manager
2.自动转发
别名还可以用在这样的情况,即定义自动的邮件转发。例如,某个用户以前在你的系统上接受电子邮件,现在他有了一个新的电子邮件,希望发到你的机器上的邮件自动被转发到他新的电子邮件地址上,那么,可以使用类似这样的别名方式:(假设你的机器是joe@koumm.com)
joe: joe@abc.com
以后发给joe@koumm.com的电子邮件就自动中转到joe@abc.com。注意左边自动加上你的机器名字,所以左边只能是账号名字,不能是全限定邮件地址。
3. 重定向
另一个常用的办法是重定向。如果你在模板文件中定义了REDIRECT特性,那么可以使用这个功能。例如,某个人在你的机器上开了一个账户tom,后来迁移到redhat@koumm.com。那么,你可以将其别名写成
tom: redhat@koumm.com.REDIRECT
示例:
vi /etc/mail/aliases
root:redhat
joe: joe@abc.com
tom: redhat@koumm.com.REDIRECT
newaliases 将以上别名初始化。
/etc/aliases: 76 aliases, longest 10 bytes, 765 bytes total
25.3.6 用户认证
要实现用户认证的功能,需要修改sendmail配置文件,FC5 linux sendmail默认已经开启了认证功能,但是认证服务没有开启,需要手动开启。
如果发送的邮件是对linux主机上的用户发的,是不需要经过认证的。对于发送到非本域的电子邮件是需要进行发送前的认证的,如发送到互联网上的电子邮件。
1.开启认证服务
chkconfig --list |grep sasl
saslauthd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
chkconfig saslauthd on /*开机自动开启认证服务*/
service saslauthd start /*运行认证服务*/
2.配置认证服务
vi /etc/mail/sendmail.mc
#修改以下内容,如果前面有dnl把前面的dnl删除掉,才能成功。
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
#注,这里要把原来的p改成y
define(`confAUTH_OPTIONS', `A y')dnl
#是使sendmail不管access文件中如何设置,都能 relay 那些通过EXTERNAL
#LOGIN, PLAIN, CRAM-MD5或DIGEST-MD5等方式验证的邮件。
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
#confAUTH_MECHANISMS"是确定系统的认证方式,OE只支持login
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
#注释掉这一行,这一行作用是在25口发送电子邮件。
#dnl DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
#修改以下内容,把认证口也改在25口。
#dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
#去掉行首的注释符,并且将内容修改成Port=25:
DAEMON_OPTIONS(`Port=25, Name=MSA')dnl
m4 sendmail.mc > sendmail.cf
#以下配置一定要做。思路就是通过模板文件生成配置文件。
3.检测认证开启
#如果出现250-AUTH LOGIN PLAIN说明认证服务开始成功。
netstat -tnl|grep 25
telnet koumm.com 25
Trying 192.168.1.3...
Connected to koumm.com (192.168.1.3).
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.13.5/8.13.5; Tue, 3 Feb 2009 21:42:34 +0800
ehlo koumm.com /*手动输入内容*/
250-localhost.localdomain Hello redhat.koumm.com [192.168.1.3], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-DELIVERBY
250 HELP
25.3.7 smtp命令测试发信
1.测试邮件发送
telnet koumm.com 25
Trying 192.168.1.3...
Connected to koumm.com (192.168.1.3).
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.13.5/8.13.5; Tue, 3 Feb 2009 21:42:34 +0800
mail from:root@koumm.com /*从哪里发的*/
rcpt to:redhat@koumm.com /*发到哪里去*/
da
subject:hello /*邮件主题,可以没有主题。*/
hello!
. /*点号结束邮件内容*/
quit /*退出*/
2.Smtp其它命令补充
HELO:<地址>
MAIL FROM:<发件人Email地址>
RCPT TO:<收信人的E-mail地址>
VRFY:<Email地址> 验证其后的电子邮件地址的正确性
DA
Subject:<主题内容><回车>,
.<回车> 结束邮件的编辑
RSET 中止发信操作,删除输入内容。
QUIT
3.用户接收
收信可以用以下方式进行,也可以用pop命令直接接收也可以。
su - redhat
mail /*收信*/
25.4 pop3服务配置
pop3服务,不同的版本的linux中POP程序都不相同。Fc5与redhat企业版采用是dovecot程序来实现pop/imap服务。
redhat linux9中采用的是imap来实现pop/smtp服务。
25.4.1 dovecot程序pop/imap配置
dovecot中安装好后,就可以提供pop3/imap服务了,不需要单独配置,dovecot配置文件/etc/dovecot.conf
vi /etc/dovecot.conf
#只需要修改以下内容,其它不需要动。
protocols = imap imaps pop3 pop3s
listen = *
25.4.2 imap程序pop/imap配置
imap程序的安装配置主要是在redhat linux9系统中,其中安装好imap程序后,pop/imap服务的配置文件就已经安装好了,需要对其进行配置才能使用。注明:linux9中的pop服务的启动是采用超级守护程序xinetd来进行启动的。
1.安装imap
rpm -ivh imap-2001a-18.i386.rpm
2.配置pop3
vi /etc/xinetd.d/ipop3
default: on
# description: The telnet server serves telnet sessions; it uses
# unencrypted username/password pairs for authentication.
service ipop3
{
disable = no 把原来的yes改成no就OK
flags = REUSE
....
wait = no
}
/etc/rc.d/init.d/xinetd restart
注:对于redhat linux9的配置可能与现在的新系统不一样,但是相关原理一致,可以在不同的环境中采用不同的方法来实现。
25.4.3 outlook测试收发信
打开Outlook Express,修改你的账号属性,在服务器选项,选取我的smtp服务器需要认证,其它配置根据向导进行。
对于sendmail配置认证功能,找了很多的文章,进行实践,但是在oe中怎么就不能够实现,因为验不验证都可以实现收发邮件,是不是sendmail本身的问题还是怎么回事,这个问题留待以后再解决了。
解决:已经更新了配置。对于发送到互联网的邮件需要选择身份验证。Linux主机上用户之间的邮件发送不需要认证。
25.4.5 pop命令测试收信
1.测试邮件发送
#红色为命令,后面为参数
telnet koumm.com 110
Trying 192.168.129.20...
Connected to 192.168.129.20.
Escape character is '^]'.
+OK POP3 [192.168.129.20] v2001.78rh server ready
user redhat /*邮箱的用户名*/
+OK User name accepted, password please
pass redhat /*邮箱的密码*/
+OK Mailbox open, 1 messages
list /*显示信件个数、序号和每个信件的大小*/
+OK Mailbox scan listing follows
1 608 /*邮件序号,以及邮件占用的字节数*/
.
stat /*用户共有多少封信件在信箱中*/
+OK 1 608
retr 1 /*返回第一封信的全部内容*/
+OK 608 octets
Return-Path: <root@localhost.localdomain>
Received: from localhost.localdomain (redhat [127.0.0.1])
by localhost.localdomain (8.12.8/8.12.8) with SMTP id 31812
for <redhat@koumm.com>; Wed, 11 Feb 2009 20:31:03 +0800
Received: (from root@localhost)
by localhost.localdomain (8.12.8/8.12.8) with SMTP id 31812
for redhat@koumm.com; Wed, 11 Feb 2009 20:31:03 +0800
Date: Wed, 11 Feb 2009 20:31:03 +0800
From: root <root@localhost.localdomain>
Message-Id: <200902111231.n1BCV3F4001810@localhost.localdomain>
To: redhat@koumm.com
Subject: book
Status:
book
book
book
yes
.
quit
+OK Sayonara
Connection closed by foreign host.
2.其它命令
USER <用户名>
PASS <密码>
STAT 将告诉用户共有多少封信件在信箱中。
LIST 显示信件个数、序号和每个信件的大小。
TOP n m 显示第n个信件前m行的内容。
RETR n 可以显示第n个信件的全部内容。
DELE n 删除指定的第n个信件。
REST n 恢复被删除的n个信件。
LAST 显示下一个信件的编号。
NOOP 不执行任何操作,仅用来测试服务器的响应是否正常。
QUIT 退出POP3服务器,结束信件查阅过程。
25.5 sendmail配置总结
想配置sendmail已经很久了,但是总由于对电子邮件的服务不是很了解,或者是对sendmail的介绍太少,对其不是很了解,结果托了很长的时间。只到2009年2月3号才配置完成,但是当时对smtp的认证的配置不成功,结果第二天在网上找资料才发现原因,还好,没有走多少的弯路。
在配置的过程中,一定要了解相关的知识,其中系统管理中的内容的深入了解对网络服务的配置以及排错起了很大的作用,所以对相关知识还需要深入了解。
邮件系统中sendmail由于是默认安装,并且使用广泛,而且配置复杂。对它的了解具体有一定的意义。
通过outlook向系统中用户发送的电子邮件,用户通过mail命令接收到显示为烂码,可以通过修改“工具/选项/发送/电子邮件格式/选择纯文本方式”,可以解决。