我们来对邮件协议进行总结,并探讨邮件服务器的工作原理
一、邮件协议剖析
1.指令过程描述
记得上一篇总结,我们手动敲指令发邮件的时候,登录smtp服务器的第一句话是:
ehlo emailtest3842
这是通知邮件服务器我们即将要登录。
在第一代通信协议当中(smtp的低版本),我们使用的是helo,后来smtp升级之后,
变成了第二代协议,为了区分第一代和第二代,新版的指令变为ehlo。
输入上面的信息之后,服务器一般会回复我们:
auth login plain
这就代表了smtp服务器要求我们进行权限验证(登录),选择登录方式是login还是plain。
接着我们输入:
auth login
代表我们使用login登录的方式进行授权。
然后smtp服务器让我们输入账号和密码:
base64 username
xxxxxx
base64 password
xxxxxx
我们的邮件服务器需要我们输入Base64加密之后的账号和密码。
下面我们输入:
mail from:<[email protected]>
表明发邮件的账号。
smtp服务器回复OK之类的信息。
下面我们输入:
rcpt to:<[email protected]>
表明收件人的账号。
smtp服务器回复OK之类的信息。
然后我们输入:
data
代表我们要编辑邮件的信息。
接下来我们编辑邮件内容(from和to等代表的信息,这里可以随便填写):
from:xxxx
to:xxxx
subject:xxxx
date:
content!!!
.
打点“.”之后就结束编辑邮件。
输入quit就推出smtp邮件服务器。
二、邮件服务器的工作原理
我们使用邮件客户端(如outlook),输入邮件smtp服务器信息和pop3服务器信息,
之后输入账号密码就可以进行邮件的收发了。此时有一个问题,当我们从客户端
登录126的smtp服务器的时候,是需要输入账号密码的,但是sina向126的smtp服务器
发送请求和传递邮件的时候,是不需要sina输入账号密码的,这个时候126怎么知道
什么时候放开smtp服务器?
其实每个smtp服务器区别邮件客户端的请求和其它smtp请求的方法是,当接受到
ehlo请求的时候,只要判定一下后面跟着的用户名用DNS域名解析之后的ip是不是请求方
的ip即可,如果不是,那说明是邮件客户端的请求,就要求输入账号密码进行验证。
如果是,说明是邮件服务器的请求,就放行。
这里以新浪的Smtp处理服务器为例:
区别客户端和其它smtp服务器的方法就是上面说的DNS解析区分。
处理客户端的smtp服务器的ip绝对不能注册到DNS中。
题外话:DNS域名解析过程: