天天看点

【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理

我们来对邮件协议进行总结,并探讨邮件服务器的工作原理

一、邮件协议剖析

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处理服务器为例:

【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理

区别客户端和其它smtp服务器的方法就是上面说的DNS解析区分。

处理客户端的smtp服务器的ip绝对不能注册到DNS中。

题外话:DNS域名解析过程:

【Java邮件开发】3.邮件协议总结与邮件服务器的工作原理

转载请注明出处:http://blog.csdn.net/acmman/article/details/70478077