大家好,又见面了,我是你们的朋友全栈君。
SMTP是什么
电子邮件是一种异步通信媒介,即发送邮件时不必与他人的计划进行协调。
因特网电子邮件系统总体有三个部分组成:用户代理,邮件服务器和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。其中,用户代理允许用户阅读、回复、转发、保存和撰写报文,常见的电子邮件用户代理有微软Outlook和Apple Mail。邮件服务器形成了电子邮件体系结构的核心,邮件服务器管理用户的邮箱,并且运行SMTP的客户端和服务器端。
那么,简单邮件传输协议(SMTP)是什么?
协议定义了在两个或多个通信实体之间交换的报文的格式和顺序,以及报文发送或报文接收或其他事件采取的动作。SMTP是将邮件从源地址向目的地址发送方式的规则,并控制端系统发送的方式。
不难理解,SMTP是因特网电子邮件的核心。SMTP用于从发送方的邮件服务器到接收方的邮件服务器。值得一提的是,SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。
因特网电子邮件系统的总体描述:
邮件发送过程
一个典型的邮件发送过程:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。
简述一下邮件发送的整个过程。
1、发送方Alice调用用户代理并提供接收方Bob的邮箱地址,在用户代理上撰写待发送的报文,接着指示用户代理发送报文。
2、用户代理将Alice撰写的报文发送到Alice的邮件服务器,报文到达邮件服务器后将被分发到报文队列中。
3、运行在Alice的邮件服务器的SMTP客户端发现保温队列中的这个报文后将会创建一个到运行在Bob邮件服务器的SMTP服务器的TCP连接。
4、经过SMTP握手后,SMTP客户端通过TCP连接把报文发送出去。
5、在Bob的邮件服务器上,SMTP服务器接收到报文后,邮件服务器将报文放入Bob的邮箱里。
6、Bob有空时看到邮箱消息便调用用户代理查阅报文。
(初次接触有些难以理解,结合自己发送邮件的过程会更好一些理解)
在此过程中,SMTP使用一些命令和应答对报文进行传输。
常见的SMTP命令:
指令 | 说明 |
---|---|
HELO | 与服务器确认,通知其客户端使用的机器名称,一般邮件服务器不做限定 |
AUTH | 使用AUTH LOGIN与服务器进行登录验证 |
MAIL FROM | 发件人信息,填写与认证信息不同往往被定位为垃圾邮件或恶意邮件 |
RCPT TO | 收信人地址 |
DATA | 输入邮件基本信息 |
FROM | 邮件基本信息:发信人显示信息(此处可以伪造身份,但是非常容易被识别) |
TO | 邮件基本信息:服务器收件人显示信息 |
SUBJECT | 邮件基本信息:邮件标题,不填写也往往容易被定位为垃圾邮件 |
QUIT | 断开链接 |
常见SMTP应答返回码:
返回码 | 说明 |
---|---|
220 | 服务就绪 |
250 | 请求动作成功完成 |
235 | 认证通过 |
221 | 处理中 |
354 | 发送开始,往往与data指令结合 |
500 | 指令错误 |
550 | 命令无法执行 |
报文的格式
报文有两部分,贴切点形容就是信封和内容。
所谓的信封,其实是SMTP命令。
内容,邮件报文对象的内容,分为首部和主体两部分。
首部理解为信件的描述信息,主体理解为发件人向收件人传达的主要信息。
一旦建立TCP连接,就开始如下过程:(回顾上述传输过程中的3)
C:或S:后的ASCII码都是客户或服务器主机传递到TCP套接字的行的内容。
S: 220 hamburger. edu
C: HELO crepes. fr
S: 250Hello crepes. fr, pleased to meet you
C: MAIL FROM:<alicedcrepes. fr>
S: 250 alice@ crepes. fr... Sender ok
C: RCPT TO:<bob@ hamburger. edu>
S: 250 bobehamburger. edu... Recipient ok
C: DATA S:354 Enter mail, end with "."on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger. edu closing connection
解说
SMTP握手
1. 从客户端使用熟知端口号25建立与服务器的TCP连接,SMTP服务器向该客户送回应答码220,并且还为客户端提供了服务器的域名
2. 客户端收到应答码后,发送HELO命令,启动客户端和服务器之间的SMTP会话。该客户端发送的HELO用来向服务器提供客户端的标识信息
3. 服务器端回应应答码250,通知客户端:请求建立邮件服务会话已经实现
邮件报文撰写并发送
1. 客户用“MAIL FROM”向服务器报告发信人的邮箱与域名
2. 服务器向客户回应应答码“250”,代表请求命令完成
3. 客户用“RCPT TO”命令向服务器报告收信人的邮箱与域名
4. 服务器向客户回应应答码“250”,代表请求命令完成
5. 客户用“DTAT”命令对报文的传送进行初始化
6. 服务器回应“354”,表示可以进行邮件输入了
7. 客户用连续的行向服务器传送报文的内容,每行以两字符的行结束标识(CR与LF)终止。报文以只有一个“.”的行结束
8. 服务器向客户回应应答码“250”,代表请求命令完成
终止SMTP会话
1.客户端发送“QUIT”命令
2.服务器收到命令后,回应应答码“221”,并结束会话
邮件访问协议
这时,信件已在接收方邮件服务器上的邮箱了,用户调用用户代理查看邮件报文时要用到邮件访问协议对邮件进行查阅。
流行的邮件访问协议有:第三版的邮局协议(Post Office Protocol –version 3 , POP3),因特网邮件访问协议(Internet Mail Access Protocol)和HTTP。
简述一下POP3。
POP3按照三个阶段进行工作:特许、事务处理以及更新。特许就是用户发送用户名和口令用以鉴别用户;事务处理就是取回报文,同时允许用户代理对报文做删除标记,取消报文删除标记以及获取邮件统计信息。更新就是用户发出QUIT命令结束POP3会话后邮件服务器删除被标记为删除的报文。
值得一提的是,使用POP3的用户代理可以被配置为“下载并删除”和“下载并保留”两种方式。顾名思义,“下载并删除”就是调用用户代理下载并查看邮件之后将该邮件报文删除;而“下载并保留”则相反,下载并查看该邮件报文将继续保留在邮件服务器,可用不同的终端系统进行重复下载并查看该邮件报文。
POP3与IMAP最大的不同是,POP3只能通过下载邮件报文后在端系统本地对邮件报文进行移动或删除;而IMAP则提供了通过远程服务器上的文件夹对邮件报文进行移动并查看的指令。
HTTP邮件访问协议也不难理解,最大的特点就是它的用户代理就是普通的Web浏览器,用户代理和服务器之间的通信是通过HTTP进行的。
实验
1、使用Telnet与SMTP服务器进行一次直接对话
使用网易邮箱向QQ邮箱发送一封邮件,邮件内容为:
Hi,ROse.
How are you recently?
结束之后,QQ邮箱收到一封邮件。不信的话,你试试~
2、使用Telnet登录到POP3服务器110端口,发出指令访问邮件
使用QQ邮箱对网易邮箱发送一封邮件,接着使用Telnet登录到POP3服务器查看邮件内容。
对邮件内容的base64编码进行解码。
tips
1、获取base64编码
echo -n “待编码内容” |base64
2、获取base64编码的解码
echo “待解码的base64编码” |base64 -d
参考文章:
SMTP协议介绍
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128193.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...