linux sendmail配置详解

sendmailMUA (mail user agent 邮件用户代理),用于用户端发送邮件或者阅读邮件 linux有mutt 这个工具MTA (mail tranfer agent 邮件传输

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.cf --sendmail邮件服务启动时读取的主配置文件 /etc/mail/sendmail.mc --管理员修改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@li.cluster.com --用此命令发送邮件 -s后接邮件主题

1111 --写邮件内容

. --“." 点号表示结束

Cc: --直接回车退出

[root@li ~]# mail -s 'yyyy' a@li.cluster.com < /etc/grub.conf --还可以这样把/etc/grub.conf的内容直接发送给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.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 11:30:09 0800

helo li.cluster.com --定义来访者,可以用help 去查看支持哪些命令集,用help +命令来看单个命令如何使用

,

meet you

mail from:aa@sina.com --定义一个发送者,这里可以随便定义

250 2.1.0 aa@sina.com... Sender ok

rcpt to:a@li.cluster.com --定义接收者,这里是我本机的a 用户

250 2.1.5 a@li.cluster.com... 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 li.cluster.com closing connection

Connection closed by foreign host.

yum install mutt

mutt --是一个在unix-like 系统下小巧但强大的基于文本的一个能发送和阅读邮件的工具(MUA )

--查看邮件方法二:

直接在root 用户下使用mutt 命令,可以看到root 用户的收信箱

如果要看普通的邮件,就要先su - 普通用户名 切换到普通用户再使用mutt 命令查看

--发送邮件方法三:

[root@li ~]# mutt a@li.cluster.com --可以直接使用这样的命令发送给a@li.cluster.com

,会提示用户写内容,还有附件等功能

--发送邮件方法四:

[root@li ~]# cat /etc/rc.local |sendmail -v a@li.cluster.com

-------------------------

下面先把DNS 的MX 记录给配置好

[root@li mail]# vim

/var/named/chroot/var/named/data/master.cluster.com.zone

$TTL 86400

@ IN SOA li.cluster.com. root.cluster.com. ( 2010051605

60

60

360

86400)

,

IN NS li.cluster.com.

IN MX 0 li.cluster.com. --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/resolv.conf --DNS指向改为本机

[root@li mail]# nslookup --验证MX 记录的方法

> set type=mx

> cluster.com

Server: 10.1.1.35

Address: 10.1.1.35#53

cluster.com mail exchanger = 0 li.cluster.com. --看到这样的信息表示成功

最好把时间同步也配好

[root@li mail]# echo 'while :; do ntpdate 10.1.1.1> /dev/null 2>/dev/null; sleep 10; done'>> /etc/rc.local

--每十秒同步一次10.1.1.1,放到/etc/rc.local里,开机自动运行

把邮件客户端软件claws-mail 拷过去装好

ls /share/soft/soft/mail_client/

tar xvf /share/soft/soft/mail_client/claws-mail-3.5.0.tar.gz -C /usr/src/

tar xvf /share/soft/soft/mail_client/libetpan-0.57.tar.gz -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/sendmail.mc

DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl --把127.0.0.1改为0.0.0.0,或者是把中间那一小段去掉

保存退出

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf --如果没有装m4.i386这个包,就需要使用m4命令去生成sendmail.cf 配置文件,装了就不需要,重启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.1.35...

Connected to li.cluster.com (10.1.1.35).

Escape character is '^]'.

220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 13:47:01 0800

helo li.cluster.com

250 li.cluster.com

.................

例二:用claws-mail 收发邮件

用claws-mail 发送一封邮件给本机用户,能写,但点收信时会报连接到pop.cluster.com:110失败

原因检验:

[root@li /]# nslookup pop.cluster.com --先查看DNS ,能解析

Server: 10.1.1.35

Address: 10.1.1.35#53

,

Name: pop.cluster.com

Address: 10.1.1.35

netstat -ntl |grep 110 --再查看端口,发现没有110端口,表示pop3协议没有配置

所以要去配置dovecot 服务

[root@li /]# vim /etc/dovecot.conf

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@cluster.com --使用短域名

222222

.

Cc:

[root@li /]# tail /var/mail/a --查看时看不到,表示不支持短域名

[root@li /]# tail /var/mail/root --可以看到扔到root 的邮箱去了 配置方法:

[root@li /]# vim /etc/mail/local-host-names --写上短域名

cluster.com

jordon.com

meijinsz.com.cn

--注意的是写的域名,最好是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@cluster.com

/etc/init.d/sendmail reload

例五:邮件的虚拟账号,虚拟用户表格

[root@li /]# vim /etc/mail/virtusertable a@cluster.com b@cluster.com --把b@cluster.com的账号虚拟成a@cluster.com账号

@cluster.com c --所有发往cluster.com 域的邮件都会发到本地的c 用户的mailbox

/etc/init.d/sendmail reload

例五:邮件中继

保持上面的配置不变的情况下,用另一台电脑做测试

[root@dns ~]# telnet 10.1.1.35 25 --另一台电脑测试35这台服务器上的smtp 协议

Trying 10.1.1.35...

Connected to 10.1.1.35 (10.1.1.35).

Escape character is '^]'.

220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 15:39:36 0800

helo dns.lu.com

,

250 2.1.0 sdfsa@baidu.com... Sender ok

rcpt to:sfsadfa@qq.com

550 5.7.1 sfsadfa@qq.com... 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 :sina.com REJECT --表示从sina.com 来的邮件都拒绝

TO:baidu.com discard --到baidu.com 的邮件丢弃

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

Connected to 10.1.1.35 (10.1.1.35).

Escape character is '^]'.

220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 15:51:35 0800

helo dns.lu.con

,

yum install cyrus-sasl*

vim /etc/mail/sendmail.mc --把下面三行注释打开

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

Connected to li.cluster.com (10.1.1.35).

Escape character is '^]'.

220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:42:54 0800

ehlo li.cluster.com --注意这里是ehlo 不是 helo

,

mail from:fsfafa@baidu.com

250 2.1.0 fsfafa@baidu.com... Sender ok --这里没有要求验证

原因:是因为smtp 验证默认只是在587端口,而不是25端口,所以你还是直接telnet 10.1.1.35 25 就避开了使用smtp 验证

vim /etc/mail/sendmail.mc

把下面这句

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

Connected to li.cluster.com (10.1.1.35).

Escape character is '^]'.

220 li.cluster.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 29 May 2010 16:55:58 0800

helo li.cluster.com

标签: