首页 > 编程知识 正文

他的一封邮件的英文(发件箱和已发送邮件的区别)

时间:2023-05-04 08:33:00 阅读:104898 作者:1306

00-1010我们经常使用电子邮件客户端,如Foxmail和Outlook来发送和接收电子邮件。你应该知道邮件协议的基本知识。发送邮件是通过SMTP协议完成的,而接收邮件是通过POP3协议完成的。由于工作原因,笔者对邮件协议的通信过程做了完整的分析,从而巩固对通信协议的理解。

背景

我曾经做过一个基于UDP字节序列的应用:在两个进程之间【一个是用Java开发的,一个是C进程】,通信业务是通过对UDP包中的字节数据进行逐一解析来完成的,最小的业务数据单元是比特。

一般过程是这样的:

循环读取UDP数据包。首先,取出第一个字节,读取该字节的前两位数据。它表示某一服务类型的服务数据的总长度。读取第二个字节后回收数据,直到达到总长度。很多年过去了,那个应用的具体功能已经忘记了,但是UDP字节数据的分析过程还是很清晰的。它让我明白了什么是协议,其实是基于简单处理规则的通信协议,也可以看作是自定义的应用层协议。

这个可以扩展到OSI七层模型中的其他协议,类似于这个简单的协议,只是通信规则比较复杂!

协议是什么

SMTP被称为“简单邮件传输协议”,这是来自百度百科的解释:

SMTP是一种相对简单的基于文本的协议。在其上指定一个或多个消息接收者(在大多数情况下,他们被确认存在),然后发送消息文本。您可以通过telnet程序轻松测试SMTP服务器。使用SMTP TCP端口25,需要MX(邮件交换)DNS来确定给定域名的SMTP服务器。

让我们先来看看SMTP的状态代码和命令集:

SMTP状态代码和命令集

然后,我们来看看Foxmail邮件的数据包捕获分析。在消息中,状态代码包含邮件服务器响应的内容,命令由客户端发起。

00-1010客户端启动了SMTP通信以连接到邮件服务器。这是我截获的分析过的通讯内容:

沟通过程

这里使用的关键命令是gsdbl和AUTH LOGIN,它们用于启动会话和身份验证。客户端连接到服务器后的通信过程如下:

服务器回复220状态代码以通知客户端它准备好了;从客户端发送gsdbl命令;服务器回复250,表示欢迎;服务器回复一堆250(对应中间步骤);客户端启动AUTH LOGIN身份验证;响应334等待客户端发送认证信息;客户端发送认证信息的密文数据,使得密文通信进行两次;服务器回复235认证成功,并且认证过程完成。00-1010认证成功后,客户端将发件箱和所有收件箱地址发送给服务器,服务器验证后回复250 OK。

服务器身份验证回复

SMTP 协议基础

数据传输结果

发送消息正文的过程:

客户端发送数据命令;服务器回复354状态码,通知客户端可以发送邮件内容;客户端开始发送消息正文;服务器回复250;客户端发送QUIT命令结束会话;服务器回复221,告诉客户端它正在关闭传输通道。00-1010以上是一封邮件经过的完整过程,就像客户端和服务器隔空喊话,每一步都有问有答,井然有序。这样看完,发现通信协议挺有意思的。这大概就是应用层协议的一般思路。定义业务规则和状态码,按照双方约定的流程进行通话。

了解了这个过程之后,如果在工作中需要通信,可以参考网络协议的设计思路,实现基于Socket的通信服务应该不复杂!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。