SMTP是简单邮件传输协议(Simple Mail Transfer Protocol)的缩写,这篇文章将通过如何使用telnet命令发生邮件结合RFC文档来学习一下SMTP协议的基础知识。
OSI模型 & SMTP
根据OSI7层或者5层的模型不同,各层常见的协议信息如下:
其实协议众多,这里借用一张来源与网络的整理结果用于展示OSI7层模型的常见协议的信息,包括应用层的SMTP/POP3/IMAP4
SMTP vs POP3 & IMAP4
SMTP和POP3以及IMAP都是用来做什么的,简单的来说,smtp主要负责发,pop3和imap主要负责收。
一封邮件的发&收的流程是通过SMTP进行发送,使用POP3或者IMAP4进行接收的。
SMTP RFC文档
SMTP的RFC初始版本是RFC 821,以下列出了SMTP相关的一部分RFC变化的列表
RFC版本 | 时间 | 说明 | URL |
---|---|---|---|
RFC 821 | 1982/08 | 初始版本 | https://tools.ietf.org/html/rfc821 |
RFC 974 | 1986/01 | 域名系统需求和实现相关 | https://tools.ietf.org/html/rfc974 |
RFC 1035 | 1987/11 | 域名系统需求和实现相关 | https://tools.ietf.org/html/rfc1035 |
RFC 1869 | 1995/11 | ESMTP规格扩展 | https://tools.ietf.org/html/rfc1869 |
RFC 2841 | 2001/04 | - | https://tools.ietf.org/html/rfc2841 |
RFC 5321 | 2008/10 | - | https://tools.ietf.org/html/rfc5321 |
SMTP模型
参看RFC5321,可以了解到SMTP的模型如下:
常用指令
SMTP中包含一些基本的命令用于客户端和服务器端进行交互,现列出一些常见的指令:
指令 | 说明 |
---|---|
HELO | 与服务器确认,通知其客户端使用的机器名称,一般邮件服务器不做限定 |
AUTH | 使用AUTH LOGIN与服务器进行登录验证 |
MAIL FROM | 发件人信息,填写与认证信息不同往往被定位为垃圾邮件或恶意邮件 |
RCPT TO | 收信人地址 |
DATA | 输入邮件基本信息 |
FROM | 邮件基本信息:发信人显示信息(此处可以伪造身份,但是非常容易被识别) |
FROM | 邮件基本信息:服务器收件人显示信息 |
SUBJECT | 邮件基本信息:邮件标题,不填写也往往容易被定位为垃圾邮件 |
QUIT | 断开链接 |
常见指令返回码说明
返回码 | 说明 |
---|---|
220 | 服务就绪 |
250 | 请求动作成功完成 |
235 | 认证通过 |
221 | 处理中 |
354 | 发送开始,往往与data指令结合 |
500 | 指令错误 |
550 | 命令无法执行 |
基本流程
SMTP客户端与SMTP服务器端一个常见的流程如下所示: