一、SMTP 是什么
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),属于应用层协议,基于TCP,默认端口 25;加密版本常用端口 465(SMTPS,SSL加密)、587(STARTTLS)。
SMTP 的核心作用:发送邮件,在邮件服务器之间传递邮件。
- 用户发邮件时,客户端把邮件提交到自己的发件服务器,使用SMTP;
- 发件服务器再通过SMTP,把邮件投递到收件人的邮件服务器。
重点区分:SMTP只管发送、转发邮件;接收邮件使用POP3或IMAP。
二、SMTP 通信模型
SMTP是客户端-服务端模型,分为两类场景:
- MUA → MTA:邮件客户端(Foxmail、Outlook、网易邮箱网页端)将邮件上传到自己的发件服务器;
- MUA:邮件用户代理(Mail User Agent),也就是邮件客户端;
- MTA:邮件传输代理(Mail Transfer Agent),邮件服务器。
- MTA → MTA:发件服务器之间使用SMTP接力,跨域名投递邮件,直到送达收件方邮件服务器。
SMTP只负责把邮件送到收件服务器,收件人从服务器下载邮件,走POP3/IMAP。
三、SMTP 核心特点
- 基于TCP,面向连接,可靠传输;
- 采用命令+响应码文本交互,可读性强;
- 原始25端口明文传输,现代邮件系统普遍启用STARTTLS加密;
- 只能发送文本内容,图片、附件会使用Base64编码转成文本再传输;
- 支持邮件中继转发(Relay),但开放无认证中继会被垃圾邮件利用,现在服务器都做严格限制。
四、SMTP 常用命令
客户端向SMTP服务器发送命令,服务器返回3位数字响应码。
| 命令 | 作用 |
|---|---|
| HELO / EHLO | 客户端向服务器打招呼,EHLO支持扩展功能(STARTTLS、认证) |
| AUTH | 身份认证(账号密码),现代邮箱必须开启认证,防止匿名发垃圾邮件 |
| MAIL FROM | 指定发件人邮箱地址 |
| RCPT TO | 指定收件人邮箱,可以多个收件人 |
| DATA | 开始传输邮件正文(标题、内容、附件编码数据) |
| RSET | 重置本次邮件会话,清空已输入的发件、收件信息 |
| QUIT | 结束会话,关闭TCP连接 |
常见响应码
250 OK:命令执行成功220:SMTP服务器就绪354:收到DATA命令,提示客户端可以开始输入邮件内容,以.单独一行结束正文550:邮箱不存在、拒收、权限不足
五、一次完整SMTP邮件发送流程
场景:用户
userA@a.com发送邮件给userB@b.com
- MUA(邮箱客户端)建立TCP连接到
a.com的SMTP服务器(端口25/587); - 客户端发送
EHLO握手,服务器返回支持的扩展(STARTTLS、AUTH); - 协商STARTTLS,切换为加密通道;
- 客户端执行
AUTH,验证发件人的账号密码; MAIL FROM:<userA@a.com>,声明发件人;RCPT TO:<userB@b.com>,声明收件人;- 发送
DATA,服务器返回354; - 客户端发送邮件头部、正文、Base64编码的附件,单独一行的小数点
.表示邮件内容结束; - 服务器收到完整邮件,返回250,表示成功存入服务器队列;
- 客户端发送
QUIT,断开连接。
接下来:a.com 的MTA服务器,再次使用SMTP协议连接 b.com 的邮件服务器,把邮件投递过去。
收件人后续通过POP3/IMAP从b.com服务器收取邮件。
六、端口说明
- 25:标准SMTP端口,服务器之间邮件中继;很多运营商封禁家用网络25端口,防止垃圾邮件;
- 587:SUBMISSION端口,客户端提交邮件,推荐使用STARTTLS加密;家用客户端优先用587;
- 465:SMTPS,SSL直接加密的SMTP,旧版客户端常用。
注意:25端口不是不能加密,一般通过EHLO+STARTTLS动态开启加密;465是连接建立就直接SSL加密。
七、SMTP、POP3、IMAP 三者对比
| 协议 | 端口(加密) | 作用 | 方向 |
|---|---|---|---|
| SMTP | 25 / 587 /465 | 发送、转发邮件 | 客户端→服务器 / 服务器→服务器 |
| POP3 | 110(995) | 下载邮件,默认把邮件从服务器删到本地 | 服务器→客户端 |
| IMAP | 143(993) | 邮件保存在服务器,多端同步管理邮件 | 服务器↔客户端 |
八、优缺点
✅ 优点
- 简单成熟,全球邮件系统通用标准;
- 支持邮件中继转发,实现跨域名投递;
- 可通过STARTTLS实现通信加密。
❌ 缺点
- 原始SMTP没有身份校验,早年极易伪造发件人,是垃圾邮件泛滥根源;
- 邮件正文本身不自带签名,不能直接验证邮件真实性,需要配合SPF/DKIM/DMARC反垃圾邮件;
- 仅支持文本传输,二进制附件必须Base64编码,体积增大约1/3。
九、小结
- SMTP是应用层TCP协议,负责邮件发送与服务器间邮件转发;
- 客户端提交邮件推荐使用587端口+STARTTLS;服务器间投递一般使用25端口;
- 交互方式:文本命令 + 数字响应码;DATA命令后传输邮件内容,单独
.作为结束标记; - SMTP只负责投递,收取邮件使用POP3/IMAP;
- 现代SMTP必须开启身份认证,配合SPF/DKIM等协议防范伪造发件人和垃圾邮件。
思考题:为什么SMTP服务器之间投递邮件一般用25端口,而邮件客户端提交邮件推荐使用587?
0 条笔记