admin 管理员组文章数量: 887021
2024年1月22日发(作者:讲解oracle数据库的官方书籍)
sendmail
MUA (mail user agent 邮件用户代理),用于用户端发送邮件或者阅读邮件 linux有mutt这个工具
MTA (mail tranfer agent 邮件传输代理 ),相当于一个邮局,server端的软件,主要的功能有,接收MUA发来的邮件和把邮件发送给下一个MTA,可以说是一个邮件路由(mail router),server端的软件就属于MTA,现在开源的有sendmail,postfix,qmail等
MDA (mail devilery agent 邮件投递代理),主要是将MTA所接受的邮件,依照邮件的目的地将此邮件放到本机账号下或者是给下一个MTA,一般就是指mail这样的命令
邮件的协议:
发信: SMTP (simple mail tranfer protocol 简单邮件传输协议) 端口号
TCP的25端口,在发信时,MUA会主动连接MTA的port 25,然后经由SMTP协议发送出去,SMTP分为接受SMTP和发送SMTP,它不管两端主机的配置或者系统等,只要两边SMTP协议OK就可以发送邮 件
收信: POP (post office protocol 邮局协议),来连接到MTA,以读取或者下载邮件,现在常用的版本是POP3,端口为110
IMAP (internet message access protocol 网络报文件协议),能在下载邮件前先下载邮件头信息,以可以让用户选择性下载 端口 143
软件包
yum install sendmail*
yum install dovecot
sendmail.i386 --邮件服务器端 MTA
sendmail-cf.i386 --配置文件包
sendmail-devel.i386 --开发包
sendmail-doc.i386 --文档包
dovecot.i386 --(鸽舍) ,pop邮件服务端 MDA
m4.i386 --处理配置文件的包
端口 : smtp (25) pop3 (110) imap (143)
协议: TCP
服务启动脚本:
/etc/init.d/sendmail
/etc/init.d/dovecot
配置文件:
/etc/mail/ --sendmail邮件服务启动时读取的主配置文件
/etc/mail/ --管理员修改sendmail服务器功能时的配置文件
/etc/mail/local-host-names --配置支持发送邮件时使用短域名形式
/etc/mail/virtusertable --虚拟用户列表
/etc/aliases --用户别名
/etc/mail/access --邮件中继
/etc/init.d/sendmail restart
[root@li ~]# netstat -ntl |grep 25 --看到默认是只监听了127.0.0.1的回环地址
tcp 0 0
127.0.0.1:25 0.0.0.0:* LISTEN
--发送邮件方法一:
[root@li ~]# mail -s "mail" root@ --用此命令发送邮件 -s后接邮件主题
1111 --写邮件内容
. --“." 点号表示结束
Cc: --直接回车退出
[root@li ~]# mail -s 'yyyy' a@ < /etc/ --还可以这样把/etc/的内容直接发送给a用户
--查看邮件方法一:
cat /var/mail/root
cat /var/spool/mail/root --查看这两个一样的 这样是可以查看到刚才发送的邮件,因为一个是自己发送给自己用的127.0.0.1这个回环地址,这种情况不需要DNS的MX支持
--发送邮件方法二:
[root@li ~]# telnet 127.0.0.1 25 --对smtp协议进行验证
Trying 127.0.
Connected to omain (127.0.0.1).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
11:30:09 +0800
helo --定义来访者,可以用help去查看支持哪些命令集,用help+命令来看单个命令如何使用
250 Hello omain [127.0.0.1], pleased to
meet you
mail from:aa@ --定义一个发送者,这里可以随便定义
250 2.1.0 aa@... Sender ok
rcpt to:a@ --定义接收者,这里是我本机的a用户
250 2.1.5 a@... Recipient ok
data --表示下面要写邮件内容
354 Enter mail, end with "." on a line by itself
4444444444 --随便写上你要发送的邮件的内容
. --"." 点号表示结束
250 2.0.0 o4T3U9l1026581 Message accepted for delivery
quit --quit退出,有时候一次退不出,就多敲几次quit
221 2.0.0 closing connection
Connection closed by foreign host.
yum install mutt
mutt --是一个在unix-like系统下小巧但强大的基于文本的一个能发送和阅读邮件的工具(MUA)
--查看邮件方法二:
直接在root用户下使用mutt命令,可以看到root用户的收信箱
如果要看普通的邮件,就要先su - 普通用户名 切换到普通用户再使用mutt命令查看
--发送邮件方法三:
[root@li ~]# mutt a@ --可以直接使用这样的命令发送给a@
,会提示用户写内容,还有附件等功能
--发送邮件方法四:
[root@li ~]# cat /etc/ |sendmail -v a@
-------------------------
下面先把DNS的MX记录给配置好
[root@li mail]# vim
/var/named/chroot/var/named/data/
$TTL 86400
@ IN SOA . . (
2010051605
60
60
360
86400)
IN NS .
IN MX 0 . --MX是邮件交换记录,0是代表优先级别,可以写多个,数字越小优先级越高
li IN A 10.1.1.35
pop IN A 10.1.1.35
smtp IN A 10.1.1.35
/etc/init.d/named reload
vim /etc/ --DNS指向改为本机
[root@li mail]# nslookup --验证MX记录的方法
> set type=mx
>
Server: 10.1.1.35
Address: 10.1.1.35#53
mail exchanger = 0 . --看到这样的信息表示成功
最好把时间同步也配好
[root@li mail]# echo 'while :; do ntpdate 10.1.1.1> /dev/null 2>/dev/null;
sleep 10; done'>> /etc/
--每十秒同步一次10.1.1.1,放到/etc/里,开机自动运行
把邮件客户端软件claws-mail拷过去装好
ls /share/soft/soft/mail_client/
tar xvf /share/soft/soft/mail_client/ -C
/usr/src/
tar xvf /share/soft/soft/mail_client/ -C /usr/src/
cd /usr/src/libetpan-0.57/
./configure ;make ;make install
cd /usr/src/claws-mail-3.5.0/
./configure ;make ;make install
例一:让smtp协议监听所有端口
vim /etc/mail/
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把127.0.0.1改为0.0.0.0,或者是把中间那一小段去掉
保存退出
m4 /etc/mail/ > /etc/mail/ --如果没有装m4.i386这个包,就需要使用m4命令去生成配置文件,装了就不需要,重启sendmail服务自动生成
/etc/init.d/sendmail restart
[root@li claws-mail-3.5.0]# netstat -ntl|grep 25
tcp 0 0
0.0.0.0:25 0.0.0.0:* LISTEN
[root@li claws-mail-3.5.0]# telnet 10.1.1.35 25 --对本机的IP(非回环地址)做smtp协议的测试是可以做的,如果只监听127.0.0.1,就不能这样用IP测试
Trying 10.1.
Connected to (10.1.1.35).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
13:47:01 +0800
helo
250
.................
例二:用claws-mail收发邮件
用claws-mail 发送一封邮件给本机用户,能写,但点收信时会报连接到:110失败
原因检验:
[root@li /]# nslookup --先查看DNS,能解析
Server: 10.1.1.35
Address: 10.1.1.35#53
Name:
Address: 10.1.1.35
netstat -ntl |grep 110 --再查看端口,发现没有110端口,表示pop3协议没有配置
所以要去配置dovecot服务
[root@li /]# vim /etc/
protocols = imap imaps pop3 pop3s --在20行找到有一行注释,打开注释,或者写一行,表示支持pop3和imap协议
/etc/init.d/dovecot restart --重启服务后,就可以看到监听143和110端口打开了
[root@li /]# netstat -ntlup |grep 143
tcp 0 0 :::143 :::*
LISTEN 21674/dovecot
[root@li /]# netstat -ntlup |grep 110
tcp 0 0 :::110 :::*
LISTEN 21674/dovecot
然后就可以收邮件了
例三:使用支持短域名来发送邮件
[root@li /]# mail -s '222' a@ --使用短域名
222222
.
Cc:
[root@li /]# tail /var/mail/a --查看时看不到,表示不支持短域名
[root@li /]# tail /var/mail/root --可以看到扔到root的邮箱去了
配置方法:
[root@li /]# vim /etc/mail/local-host-names --写上短域名
--注意的是写的域名,最好是DNS能解析,否则测试失败
/etc/init.d/sendmail reload
再用短域名发送并测试发现是可以成功的
例四:邮件别名,邮件转发,邮件群发
[root@li /]# vim /etc/aliases
加上
a: b --表示发送给a用户的邮件,发给了b用户,a用户自己收不到
c: d,e,f --表示发送c用户的邮件,发给了d,e,f三个用户,a用户自己收不到
salegroup: :include:/etc/mail/salegroup --还可以这样写,把一些用户分组,注意/etc/mail/salegroup是不存在的,要手动建立并把这个组的成员写进去,一行一个用户;测试时发 给的用户名要写成salegroup,例如:mail -s
'7777' salegroup@
/etc/init.d/sendmail reload
例五:邮件的虚拟账号,虚拟用户表格
[root@li /]# vim /etc/mail/virtusertable
a@ b@ --把b@的账号虚拟成a@账号
@ c --所有发往域的邮件都会发到本地的c用户的mailbox
/etc/init.d/sendmail reload
例五:邮件中继
保持上面的配置不变的情况下,用另一台电脑做测试
[root@dns ~]# telnet 10.1.1.35 25 --另一台电脑测试35这台服务器上的smtp协议
Trying 10.1.
Connected to 10.1.1.35 (10.1.1.35).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
15:39:36 +0800
helo
250 Hello [10.1.1.218], pleased to meet you
mail from:sdfsa@
250 2.1.0 sdfsa@... Sender ok
rcpt to:sfsadfa@
550 5.7.1 sfsadfa@... Relaying denied. --可以看到中继拒绝
[root@li /]# vim /etc/mail/access --默认是只允许127.0.0.1中继
Connect:10.1.1.218 OK --非常信任的主机可以用OK
Connect:10.1.1 RELAY --表示允许10.1.1.0网段中继
FROM: REJECT --表示从来的邮件都拒绝
TO: discard --到的邮件丢弃
--reject和discard的区别,discard是直接丢弃,reject还要返回一个错误或者警告
我在这里加上了
Connect:10.1.1 RELAY
/etc/init.d/sendmail reload
再用刚才的另一台电脑来测试(要是10.1.1.0网段,因为上面我只允许这个网段relay)
[root@dns ~]# telnet 10.1.1.35 25
Trying 10.1.
Connected to 10.1.1.35 (10.1.1.35).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
15:51:35 +0800
helo
250 Hello [10.1.1.218], pleased to meet you
mail from:sfsafa@
250 2.1.0 sfsafa@... Sender ok
rcpt to:sdfsadf@
250 2.1.5 sdfsadf@... Recipient ok --这次测试没有报relay
deny的错误
-------------------------------------------------------------------
使用smtp验证
yum install cyrus-sasl*
vim /etc/mail/ --把下面三行注释打开
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5
LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
/etc/init.d/sendmail restart
/etc/init.d/dovecot restart
/etc/init.d/saslauthd restart
[root@li /]# telnet 10.1.1.35 25
Trying 10.1.
Connected to (10.1.1.35).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
16:42:54 +0800
ehlo --注意这里是ehlo 不是 helo
Hello [10.1.1.35], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN --看到这里有login
plain验证信息表示支持smtp验证
250-DELIVERBY
250 HELP
验证:
[root@li /]# telnet 10.1.1.35 25
Trying 10.1.
Connected to (10.1.1.35).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
16:45:12 +0800
helo
250 Hello [10.1.1.35], pleased to meet you
mail from:fsfafa@
250 2.1.0 fsfafa@... Sender ok --这里没有要求验证
原因:是因为smtp验证默认只是在587端口,而不是25端口,所以你还是直接telnet 10.1.1.35 25 就避开了使用smtp验证
vim /etc/mail/
把下面这句
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
改为
DAEMON_OPTIONS(`Port=25, Name=MSA, M=Ea')dnl
然后还要
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把这名注释掉,注意注释时用dnl,不用#
--表示强制使用smtp验证
/etc/init.d/sendmail restart
[root@li /]# telnet 10.1.1.35 25
Trying 10.1.
Connected to (10.1.1.35).
Escape character is '^]'.
220 ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010
16:55:58 +0800
helo
250 Hello [10.1.1.35], pleased to meet you
mail from:sfsafsa@
530 5.7.0 Authentication required --现在就会看到需要验证
auth login --开始验证
334 VXNlcm5hbWU6
a --输入用户名,会报错,因为这里是用base64位编码
501 5.5.4 cannot decode AUTH parameter a
auth login
334 VXNlcm5hbWU6
YQ== --这就是a的base64位编码
334 UGFzc3dvcmQ6
MTIz --这是123的base64位编码
235 2.0.0 OK Authenticated --验证成功,可以发送邮件了
mail from:sdfasfas@
250 2.1.0 sdfasfas@... Sender ok
rcpt to:b@
250 2.1.5 b@... Recipient ok
data
354 Enter mail, end with "." on a line by itself
last test
.
250 2.0.0 o4T8twFU025598 Message accepted for delivery
quit
221 2.0.0 closing connection
Connection closed by foreign host.
cat /var/mail/b 是可以看到发送的邮件
---------------
用claws-mail来验证
点设置--目前账号的偏好设置--发送--把SMTP鉴权(SMTP AUTH)前面的勾打上--鉴权方式选PLAIN--用户ID和密码写上本机的一个普通名和其密码就OK
再发送信件等都是经过了SMTP验证的
版权声明:本文标题:linux sendmail配置详解 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705932111h494398.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论