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验证的


本文标签: 邮件 用户 发送 表示