无需登录 数据私有 本地保存

SMTP 命令行模拟器 - 交互邮件发送过程

11
0
0
0
smtp-cli — smtp.example.com:25 (ESMTP) Connected
smtp>

SMTP 协议常见问题与知识点

SMTP (Simple Mail Transfer Protocol) 即简单邮件传输协议,是互联网上电子邮件传输的核心协议,定义在 RFC 5321 中。它采用客户端-服务器模型,通过TCP端口25/465/587进行通信。

工作流程:
1️⃣ 客户端连接到SMTP服务器(服务器返回220就绪响应)
2️⃣ 客户端发送 EHLO/HELO 标识自己(扩展/标准问候)
3️⃣ MAIL FROM 指定发件人地址
4️⃣ RCPT TO 指定收件人地址(可多次指定)
5️⃣ DATA 命令开始传输邮件内容
6️⃣ 以 .(单独一行的句号)结束邮件内容
7️⃣ QUIT 断开连接

SMTP仅负责发送和中继邮件,收取邮件需使用POP3或IMAP协议。

端口协议加密用途
25SMTP无/STARTTLS服务器间中继(MTA→MTA),多数ISP封锁出站25端口
465SMTPSSSL/TLS(隐式)已废弃但广泛使用,连接即加密
587SubmissionSTARTTLS⭐ 推荐!客户端提交邮件(MUA→MTA),需认证

最佳实践:使用端口587配合STARTTLS和SMTP AUTH进行邮件提交。

2xx — 成功
220 服务就绪 | 250 请求完成 | 221 服务关闭

3xx — 需要更多信息
354 开始邮件输入(DATA命令后)

4xx — 临时错误
421 服务不可用 | 450 邮箱不可用(临时) | 451 处理错误

5xx — 永久错误
500 命令无法识别 | 501 参数语法错误 | 503 命令顺序错误 | 550 邮箱不存在/被拒绝

SMTP AUTH(RFC 4954)是SMTP的认证扩展,要求客户端在发送邮件前证明身份。常用机制:PLAINLOGINCRAM-MD5XOAUTH2(Gmail等)。

STARTTLS(RFC 3207)允许在现有明文中升级为TLS加密连接。客户端发送 STARTTLS 命令,服务器响应220后,双方协商TLS。

区别:STARTTLS在同一个端口上升级连接;SMTPS(465端口)从一开始就是加密的。现代部署推荐使用STARTTLS。

SPF (Sender Policy Framework) — DNS TXT记录,指定哪些IP/主机有权使用该域名发送邮件。接收方检查发件IP是否在SPF记录中。

DKIM (DomainKeys Identified Mail) — 使用非对称加密对邮件进行数字签名。发件方用私钥签名,接收方通过DNS中的公钥验证签名完整性。

DMARC (Domain-based Message Authentication) — 基于SPF和DKIM,定义域名所有者希望如何处理未通过验证的邮件(none/quarantine/reject),并提供报告机制。

⭐ 三者结合使用可有效防止邮件伪造和钓鱼攻击。

From: 发件人地址(信封发件人由MAIL FROM指定,可不同)
To: 收件人地址
Subject: 邮件主题
Date: 发送日期时间(必须符合RFC 5322)
Message-ID: 全局唯一邮件标识符
MIME-Version: MIME版本(通常为1.0)
Content-Type: 内容类型(text/plain, text/html, multipart/alternative等)
Received: 每个中继服务器添加的追踪头
Return-Path: 退信地址(由MAIL FROM设定)

550 5.1.1 User unknown — 收件人不存在,检查邮箱地址拼写
550 5.7.1 Relaying denied — 中继被拒绝,需要SMTP AUTH认证
421 Too many connections — 连接数超限,稍后重试
451 Temporary local problem — 服务器临时故障,稍后重试
501 Bad address syntax — 邮箱格式错误,检查 <> 括号和@符号
503 Need EHLO/HELO first — 命令顺序错误,先发送EHLO
554 Message rejected — 邮件被策略拒绝(可能触发反垃圾规则)

排查工具:使用本模拟器熟悉命令流程 → telnet测试 → swaks工具 → 检查DNS记录(SPF/DKIM/DMARC) → 查看服务器日志