-
ESMTP
身份验证的机制有很多种,最常见的是
LOGIN
机制,类似于
POP3
的
身
份验证方式,即分两步输入账号和密码。在所有的验证机制中,信息全部采用
Base64
编码。
例如,用
邮件服务器发送邮件,从开始
连接到身份验证的过程如
下
(
红色和蓝
色分别代表客户端和服务器
)
:
(
连接到
:25)
220sp1ESMTPv2.1
EHLOABCDEFG
250-PIPELINING
250-SIZE20480000
250-ETRN
250-AUTHLOGINPLAINDIGEST-MD5CRAM-MD5(
p>
支持的身份验证机制种
类
:LOGIN,P
LAIN
等
)
2508BITMIME
AUTHLOGIN
334VXNlcm5hbWU6(Base64
解码后
:Username:)
Ymh3YW5n(Base64
编码前
:bhwang)
334UGFzc3dvcmQ6
(Base64
解码后
:Password:)
bXlwYXNzd29yZCFteXBhc3N3b3JkISE=(Base64
编码前
:********)
235Authenticationsuccessful
另外一种较常见的机制是
PLAIN
。
与
LOGIN
机制的不同之处在于一次性输入账号
和密码,格式为
“
账号
<
br>
密码
”
,其中
为字节
0
。用
PLAIN
机制
代替上面的身份验
证过程:
AUTHPLAIN
334
AGJod2FuZwBteXBhc3N3b3Jk
IW15cGFzc3dvcmQhIQ==(Base64
编码
前
:
235Authenticationsuccessful
有的
ESMTP
服务器,例如采用
p>
CoreMail
系统的
,,,
等,不回复
334
代
码行
,客户端在输入
AUTHPLAIN
后,直接输入符合格式要求
的账号和密码即可。
LOGIN<
/p>
和
PLAIN
机制没有对账号和密码进行
加密,相当于明文传输,
Base64
编
码只是一层纸而已。
DIGEST-MD5,CRAM-MD5,GSSAPI,KE
RBEROS_V4
等身份
验证机制能够加密传输内容。
SMTP(Simple Mail T
ransferProtocol)
即简单邮件传输协议,它是一组用于由
源地址到目的地址传送邮件的规则,或
者说是由它来控制信件传输的一种中转
方式。
SMTP
协议属于
TCP
/
IP
协议族,
p>
它帮助每台计算机在发送或中转信件时
找到下一个目的地。通过
p>
SMTP
协议所
指定的服务器,我们就可以
把
Email
寄
到收信人的服务器上了
,整个过程只要
几分钟。
SMTP
服务
器则是遵循
SMTP
协议的发送邮件服务器,用来发送或中
p>
转
电子邮件
。
SMTP
的开发最初是为了在封闭的
网络中传送相对来说不太重要的简短邮
件,而不是为了在互联网中传送重要而
敏感的信息
,
因此最初通过
SMTP
传输邮
< br>件时,安全性不高。
SMTP
协议常用命令集
是工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一<
/p>
个服务器传输到另一个服务器
是个请求
/
响应
协议<
/p>
,命令和响应都是基于
ASCII
文本,
并以
CR
和
LF
符
结束。响应包括一个表示返回状态的三位数字代码
在
TCP
协议
25
号端口监听连接请求
4.
连接和发送过程:
a.
建立
TCP
连接
b.
客户端发送
H
ELO
命令以标识发件人自己的身份,然后客户端发送
MAIL
命令服
务器端正希望以
OK
作为响应,表明准备接收
c.
< br>客户端发送
RCPT
命令,以标识该电子邮件的计划接收
人,可以有多个
RCPT
行服务器端则表示是否愿意为收件人接
受邮件
d.
协商结束,发送邮件,用
命令
DATA
发送
e.
以
.<
/p>
表示结束输入内容一起发送出去
f.<
/p>
结束此次发送,用
QUIT
命令退出。<
/p>
5.
另外两个命令:
VRFY---
用于验证给定的用户邮箱是否存在,以及接收关于该用户的详细
信息。
EXPN---
用于扩充邮件列表。
6.
邮件路由过程:
SMTP
服务器基于
?
域名服务
DNS
中计划收件人的域名来路由电子邮件。
SMTP
服务器基于
DNS
中的
MX
记录来路由电子邮件,
MX
记录注册了域名和相<
/p>
关的
SMTP
中继主机,属于该域的电子
邮件都应向该主机发送。
若
SMTP
服务器
收到一封信要发到
mail@
:
il
请求<
/p>
DNS
给出主机
的
CNAME
记录,如有,假若
CNA
ME
到
,则再次请求
< br>
的
CNAME
记录,直到没
p>
有为止
b.
假定
被
CNAME
到
,
然后
sendmail
请求
@
p>
域的
DNS
给出
<
/p>
的
MX
记录
shmail
MX
5
0
c.
Sendmail
最后请求
DNS
给出
的
A
记录,即
IP<
/p>
地址,若返回值
为
1.2.3.4
d.
Sendmail
与
1.2.3.4
连接,传送这封给
mail@
的信到
1.2.3.4
这台服
务器的
SMTP
后台程序<
/p>
基本命令集:
命令
描述
------------------------------
HELO
向服务
器标识用户身份发送者能欺骗,说谎,但一般情况下服
务器都能检测到。
MAIL
初始化邮件传输
mail
form :
RCPT
标识单个的邮件接收人;常在
MAI
L
命令后面
可有多个
rcpt
to:
DATA
在单个或多个
RCPT
命令后,表示所有的邮件接收人已标识,
并初始化数据传输结束。
VRFY
p>
用于验证指定的用户
/
邮箱是否存在;由于
安全方面的原因,服
务器常禁止此命令
EXPN
验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP
查询服务器支持什么命令
NOOP
无操作,服务器应响应
OK
QUIT
结束会话
RSET
重置会话,当前传输被取消
--------------------------------
8.
MAIL
form
命令中指定的地址是称作
envelope
form
地址,不需要和发送
者自己的地址是一致的。
RCPT
TO
与之等同,指明的接收者地址称
为
envelope
to
地址,而与实际的
to
:行是什么无关。
9.
为什么没有
RC
PT
CC
和
RCPT
BCC:?
所有的接收者协商都通过
RCPT
<
/p>
TO
命令来实现,如果是
BCC
,则协商发
送后在对方接收时被删掉信封接收者
10.
邮件被分为信封部分,信头部分和信体部分
envelope
form
,
envelope
to
与
message
form:,
message
to:
完
全不相干。
evnelope
是由服务器主机间
SMTP
后台提供的,而
message
form /to
是
由用户提供的。有无冒号也是区别。
11.
怎样由信封部分检查是否一封信是否是伪造的?
a.
received
行的关联性。
现在的
SMTP
邮件传输系统,在信封部分除了两端的内部主机处理的
之个,
考虑两个公司防火墙之间的部分,若两台防火墙机器分别为A和B,但接收者检查
信封
received
:行时发现经过
了
C.
则是伪造的。
b.
received
:行中的主机和
IP
地址对是否对应如:
Receibed:
form
(
[104.128.23.115]
by
mail
.....
c.
被人手动添加在最后面的
received
行:
Received:
form
([104.128.23.115])
by
mail
.
(8.8.5)
Received:
form
by
(8.7.3)
Received:
form
by
(8.6.4)
POP3
命令列表
:
一般
telnet pop3Server110
后就可以用这些命令了,大小写不敏感
,
不包括口令
本
身,注意不要让口令回显,等验证通过后再允许回显好了。
user username
认可
pass password
认可
执行成功则状态转换
apop
name,digest
认可
一种
安全传输口令的办法,执行成功导致状态转换,请参
见
RFC
1321
stat
处理
请求
server
回送邮箱统计资料,如邮件数
、邮件总字节数
uidl n
处理
server
返回用于该指定邮
件的唯一标识,如果没有指定,返回所有的
list n
处理
server
返回指定邮件的大小等
retr n
处理
server
返回邮件的全部文本
dele n
处理
server<
/p>
标记删除,
quit
命令执行时才真正删
除
rset
处理
撤消所有的
dele
命令
top n,m
处理
返回
n
号邮件的前
m
行内容,
m
必须是自然数
noop
处理
server
返回一个肯定的响应
quit client
希望结束会话。如果
< br>server
处于
'
处理
'
状态,则现在进入
'
更新
'
状态,删
除那些标记成删除的
邮件。如果
server
处于
'
认可
'
状态,则结束会话时
< br>server
不进
入
'
更新
'
状态
关于
apop
命令
<
/p>
如果
client
使用
< br>user
命令,口令将是明文。使用
apop
命令时,
client
第一次与
< br>server
连接时,
server
向
client
发送一个
asci
i
码问候,该问候由一个字符串组成,
它对于每个
client
的连接都是唯一的,
client
p>
把它的纯文本口令附加到从
server
接
收到的字符串之后,然后计算结果字符串的
MD5
摘要,
client
把
us
ername
和
MD5
摘要作为
apop
命令的参数一起发送出去。
telnet pop3Server 110
user
username
pass ****
stat
list
retr 1
retr
2
...
dele 1
dele
2
...
quit
SMTP
命令简介
什么是
SMTP
SMTP
(Simple Mail Transfer Protocol) :
电子邮件从客
户机传输到服务器或从某一
个服务器传输到另一个服务器使用的传输协议。
SMTP
是请求
/
响应
协议,命令和
响应都是基于
ASCII
文本,并以
CR
和
LF
符结束。响应包括一个表示
返回状态的
三位数字代码。
SMTP
在
TCP
协议
25
端口监听连接请求。
什么是
ESMTP
ESMTP
(Extended SMTP)
,顾名思义,扩展
SMTP
就是对标准
SMTP
协议进行
的扩展。它与
SMTP
服务的区别仅仅是,使用
SMTP
发信不需要验证用户帐户,
而用
ES
MTP
发信时,服务器会要求用户提供用户名和密码以便验证身份。验证之
后的邮件发送过程与
SMTP
方式没有两样。
SMTP
命令
SMTP
命令包括:
HELO
向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能
检测
到。
EHLO
向服务器标识用户身
份。发送者能欺骗,说谎,但一般情况下服务器都能
检测到。
MAIL FROM
命令中指定的地址是发件人地址
RCPT TO
标识单个的邮件接收人;可有多个
RCPT
TO
;常在
MAIL
命令后面。
DATA
在单个或多个
RCPT
命令后,表
示所有的邮件接收人已标识,并初始化数
据传输,以
结束
VRFY
用于验证指定的用户
/
邮箱是否存在;由于安全方面的原因
,服务器常禁止
此命令
EXPN
验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP
查询服务器支持什么命令
NOOP
无操作,服务器应响应
OK
RSET
重置会话,当前传输被取消
QUIT
结束会话
连接
Winmail Server
使用
SMTP
命令发送邮件
例如:安装
Winmail
的邮件
服务器
IP
是
192.168.0.1
(蓝色字体内容由客户端输
入,红色字体内容是服务返回的)<
/p>
telnet 192.168.0.1 25
---------------------------------------
使用
telnet
命令连接服务器
25
端口
Trying 192.168.0.1...
-------
--------------------------------
正在连接服务器
25
端口
Connected to 1
92.168.0.1.
----------------------------
-------
连接服务器
25
端口成功
220 Winmail
Mail Server ESMTP
ready
-------------------------
显示服务器的标识名称
(Winma
il
管理工具
->
高级设置
->
系统参数
->
基本参
数中可更改
)
helo
-----
-------------------------------------------
向服务器标识用户身份,发信不
要认证,跳过下面几步直接发送
mail from
命令
250 Winmail Mail Server
ehlo
-----------------------
------------------------- ESMTP
命令
,
发信需要认证。
250-Winmail Mail Server
250-PIPELINING
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250-SIZE 20480000
250 8BITMIME
auth
login
----------------------------------
---------------
进行用户身份认证
334 VXNlcm5hbWU6
Y29zdGFAYW1heGl0Lm5ldA==
---------------
-------------------- BASE64
加密后的用
户名
334 UGFzc3dvcmQ6
MTk4MjIxNA==
---------------------------
-------------------- BASE64
加密后的密码
235 auth s
uccessfully
----------------------------
----------
身份认证成功
(
535 auth failure
------------------------------------------
身份认证失败
)
发到本系统中域名下的账户可跳过身份认证。
mail from:
----------
-------------------- mail from
地址
test1@
250 ok
----------------------
-------------------------------
命令执行成功
rcpt to:
--------------------------------
递送给地址
test2@
250 ok
----------------------
-------------------------------
命令执行成功
data
---------------------------------------------
----------
数据传输初始化
354 go ahead
----------------
-------------------------------
开始传输数据