|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
SMTP协议实现 更多...
类 | |
| SMTP邮件消息结构 更多... | |
| class | smtp_socket |
| SMTP Socket类 更多... | |
SMTP协议实现
支持明文、STARTTLS和隐式TLS连接与多种认证方式。
本实现严格遵循以下电子邮件传输与安全相关标准规范:
SMTP 核心协议规范:
SMTP 扩展标准:
SMTP 安全标准:
SMTP 认证标准:
邮件格式与 MIME 标准:
根据 RFC 5321 §3.1,SMTP 会话的基本流程:
| 步骤 | 客户端命令 | 服务器响应码 | 说明 |
|---|---|---|---|
| 1 | - | 220 | 服务器就绪 |
| 2 | EHLO domain | 250 | 扩展问候(ESMTP) |
| 3 | STARTTLS | 220 | 升级到 TLS(可选) |
| 4 | AUTH LOGIN | 334/235 | 认证(可选) |
| 5 | MAIL FROM: | 250 | 设置发件人 |
| 6 | RCPT TO: | 250 | 设置收件人(可多次) |
| 7 | DATA | 354 | 开始发送邮件正文 |
| 8 | . | 250 | 邮件正文结束 |
| 9 | QUIT | 221 | 断开连接 |
根据 RFC 5321 §4.2,SMTP 响应码按百位数字分类:
| 类别 | 响应码范围 | 含义 | 典型响应码 |
|---|---|---|---|
| 2xx | 200 – 299 | 命令成功 | 220 (就绪), 250 (OK), 235 (认证成功) |
| 3xx | 300 – 399 | 命令待处理 | 334 (等待认证凭据), 354 (开始数据) |
| 4xx | 400 – 499 | 临时失败(可重试) | 450 (邮箱不可用) |
| 5xx | 500 – 599 | 永久失败 | 550 (邮箱不存在), 554 (事务失败) |
根据 RFC 3207 和 RFC 8314,SMTP 支持三种 TLS 模式:
| 模式 | TLS 时机 | 端口 | 安全性 |
|---|---|---|---|
| none | 不加密 | 25 | 最低(明文传输) |
| starttls | 先明文,后升级 | 587 | 中等(存在降级攻击风险) |
| implicit | 连接即 TLS | 465 | 最高(始终加密) |
根据 RFC 4954,本实现支持以下认证方式:
| 方式 | RFC 引用 | 说明 |
|---|---|---|
| none | - | 无认证 |
| plain | RFC 4616 | 用户名和密码 Base64 编码传输(需 TLS) |
| login | RFC 4954 | 用户名和密码分两步 Base64 编码传输(需 TLS) |
根据 RFC 5322 和 RFC 2045,邮件格式规范:
**邮件头字段**:
| 字段 | RFC 引用 | 说明 | 是否必需 |
|---|---|---|---|
| From | §3.4 | 发件人地址 | 是 |
| To | §3.4 | 收件人地址 | 是 |
| Cc | §3.4 | 抄送地址 | 否 |
| Bcc | §3.4 | 密送地址(不显示) | 否 |
| Subject | §3.6.5 | 邮件主题 | 否 |
| Date | §3.6.1 | 发送日期 | 否(自动生成) |
| Content-Type | RFC 2045 | 内容类型(text/plain 或 text/html) | 是 |
| MIME-Version | RFC 2045 | MIME 版本(固定 1.0) | 是 |
**正文编码规则**:
基本 SMTP 连接与邮件发送:
使用 STARTTLS 和认证: