电子邮件生命周期描述了一封电子邮件在 Cloudflare Email Service 中的完整旅程。了解此过程有助于您优化电子邮件实现并排查投递问题。
Email Sending 与 Email Routing 遵循不同的处理流水线。出站流程涵盖您通过服务发送的电子邮件;入站流程涵盖在已配置 Email Routing 的域名上收到的电子邮件。
通过 Cloudflare Email Service 发送的每封电子邮件都遵循此处理流水线:
flowchart LR
A[Request Received] --> B["Rate Limit, Authentication & Suppression Check"] --> E[Delivery Attempt]
E --> G{Success?}
G -->|Yes, successfully delivered| F[Final Status & Metrics]
G -->|No - Soft Bounce| H[Retry with Exponential Backoff]
G -->|No - Hard Bounce| F
H -->|Retries remaining| E
H -->|Max retries exceeded| F
-
收到请求: 系统验证电子邮件格式、发件人授权和消息结构。无效请求会被立即拒绝,不会进入下一阶段。
-
速率限制检查: 系统按账户、域名和收件人检查发送 限制,以防止滥用。超出这些限制的请求会被临时拒绝,必须稍后重试。
-
身份验证与信誉:系统执行电子邮件身份验证检查并评估发件人信誉:
- SPF(Sender Policy Framework):通过检查 DNS TXT 记录,验证发送 IP 地址是否被授权为该域名发送电子邮件。这可防止域名伪造并提高可投递性。
- DKIM(DomainKeys Identified Mail):验证电子邮件的加密签名,以确保消息完整性并验证发件人域名。这有助于在收件服务器建立信任。
- DMARC(Domain-based Message Authentication):对未通过 SPF 或 DKIM 检查的电子邮件应用域名所有者策略,有助于防止钓鱼和品牌冒充,同时提供反馈报告。
这些身份验证机制共同确立发件人合法性并防范电子邮件欺诈。信誉评分较低的发件人可能会遇到限流或延迟处理。
-
抑制列表检查: 系统将收件人与账户的抑制列表进行比对,列表包括退信、投诉和退订。出现在列表中的收件人将被阻止接收该电子邮件。
-
投递尝试: 系统连接到收件人的邮件服务器,并通过 SMTP 尝试投递消息。当投递失败时,系统根据失败类型应用不同的重试逻辑:
- 软退信(4xx 响应):系统使用指数退避时间重试投递
- 硬退信(5xx 响应):系统将电子邮件标记为永久失败,不进行重试
-
服务器响应处理: 系统处理收件服务器的 SMTP 响应代码,以确定最终电子邮件状态:
- 2xx 代码:电子邮件投递成功
- 4xx 代码:发生临时失败,将重试该电子邮件
- 5xx 代码:发生永久失败,电子邮件无法投递
-
最终状态与指标: 根据服务器响应,系统为电子邮件分配以下最终状态之一:
- Delivered(已投递):电子邮件已被收件服务器成功接受
- Delivery failed(投递失败):电子邮件永久投递失败(硬退信)或超过最大重试次数(软退信)。通过 GraphQL Analytics API 查询时,此状态显示为
deliveryFailed。
在已配置 Email Routing 的域名上收到的每封电子邮件都遵循此处理流水线:
flowchart LR
A[SMTP Receipt] --> B[Authentication Check]
B --> C{Authenticated?}
C -->|Yes| D[Rule Match]
C -->|No| R[Reject]
D --> E{Action?}
E -->|Send to email| F[ARC Sign & SRS Rewrite]
E -->|Send to Worker| W[Worker]
E -->|Drop| X[Drop]
W --> Y{Worker action?}
Y -->|forward| F
Y -->|reply| F
Y -->|setReject| R
F --> G[Outbound Delivery]
G --> H[Final Status & Metrics]
-
SMTP 接收: 发送服务器连接到 Cloudflare MX 服务器,并通过 SMTP 提交消息。大于 入站消息大小限制 的消息会在此阶段被拒绝。
-
身份验证检查: 系统对入站消息执行 SPF、DKIM、DMARC 和 ARC 检查。根据发件人 DMARC 策略未通过身份验证的邮件会被拒绝。位于实时阻止列表(Realtime Block List)上的 IP 地址发来的邮件也会在此阶段被拒绝。详情请参阅 Postmaster information。
-
规则匹配: 系统将收件人地址与您配置的 路由规则 进行匹配。如果启用了 子地址,带有子地址的收件人会回退到基础路由规则。如果没有规则匹配且启用了 catch-all 规则,则应用 catch-all 规则。
-
操作: 系统应用匹配规则的操作:
- 发送到电子邮件:消息被转发到已验证的目标地址(阶段 5)。
- 发送到 Worker:消息被传递到您的 Worker。Worker 可以调用
forward()、reply()或setReject()。 - 丢弃:消息被静默丢弃,不再进行后续处理。
-
ARC 签名与 SRS 重写: 对于转发的消息,系统添加 ARC 密封以保留原始身份验证结果,并使用 Sender Rewriting Scheme 重写信封发件人。这允许 SPF 在目标服务器上通过。
-
出站投递: 系统连接到目标邮件服务器并投递消息。软退信会以指数退避方式重试。硬退信会在会话中作为上游 SMTP 错误返回给原始发件人。请参阅 Postmaster: SMTP errors。
-
最终状态与指标: 最终结果会被记录,并可通过 Activity log 和 GraphQL Analytics API 查看。