工程实践
Transactional Email 和 Email Campaign 为什么必须分开
从 Mandrill/Mailchimp 的产品边界出发,拆解 Campaign 被封、open tracking、sender reputation 与 Transactional/Marketing 发送隔离的工程方法。
零、为什么写这篇
2026-08-15,我重新梳理了一次企业邮件发送链路。Gmail 把接近 5,000 封/天的发件方划进 bulk sender;官方建议把 spam rate 保持在 0.1% 以下,同时避免碰到 0.3%。三个数字放在一起,已经足够杀掉一个常见误区:邮件发送的核心工作并非挑一个 SMTP API,然后把模板发出去。
真正的工作从分类开始。Password reset、收据、预约确认属于 Transactional Email;Newsletter、促销、召回、产品发布属于 Email Campaign。两类邮件共用 SMTP、DKIM、SPF 这些底层协议,但 recipient intent、发送节奏、合规义务、成功指标和故障预算全部不同。
Mailchimp 对这条边界写得很硬。Mandrill 现在的产品名是 Mailchimp Transactional Email,现行条款把它定义为 one-on-one informational email,并明确排除 bulk、promotional 和 marketing email。用 Transactional 产品跑 Campaign,风险先发生在平台条款层,之后才轮到 Gmail 的垃圾邮件过滤器。
Core Idea
Transactional Email 完成用户刚发起的事务,Campaign 发起下一次商业互动;两条流必须分开管理 consent、发送节奏、信誉边界和故障预算。
一、同样是 Email,生理结构完全不同
Transactional Email 是产品系统的一部分。用户点击「忘记密码」、完成付款、预约服务,系统发送一封与当前动作直接相关的邮件。收件人知道它为什么到来,往往还在等它。
Campaign 属于用户运营系统。企业选择一个 audience,按 segment、频率和商业目标主动触达。收件人过去可能同意过,但此刻没有等待这封邮件。这个差异决定了投诉、退订和 inactive recipient 必然更常见。
| 维度 | Transactional Email | Email Campaign |
|---|---|---|
| 触发源 | 用户动作或系统事件 | 运营计划、segment 或 journey |
| 关系 | 一对一、事件驱动 | 一对多、批量触达 |
| 用户预期 | 正在等待或可合理预期 | 需要持续证明 relevance |
| 发送形态 | 分散、连续、低延迟 | 定时、突发、需要 throttling |
| 核心指标 | delivery、latency、bounce、failure | complaint、unsubscribe、click、conversion |
| 用户控制 | notification preference | consent、topic、frequency、one-click unsubscribe |
| 典型故障 | 验证码或收据延迟 | 整批进 spam、provider rate limit、账户风控 |
这张表也解释了产品为什么分开。Transactional 系统优化单封邮件的低延迟和可靠性;Campaign 系统需要管理 audience lifecycle、segmentation、A/B test、发送窗口、退订和 suppression。把一个 Transactional API 循环调用 50,000 次,只完成了 SMTP send,剩下的风险一个都没处理。
二、「被封」至少有四层含义
团队说「邮件被封了」时,先把现象拆开。四层故障的 owner、证据和修法都不同。
| 现象 | 发生位置 | 要看的证据 |
|---|---|---|
Provider rejected |
ESP 在发送前拒绝 | suppression、domain verification、content review、account policy |
| SMTP 4xx / 5xx | 收件服务器延迟或拒绝 | 原始 SMTP response、enhanced status code、recipient ISP |
delivered 但用户没看到 |
收件服务器接收后分流 | Gmail Postmaster、seed mailbox、用户反馈 |
| Account suspended / quota lowered | ESP 自身风控 | account reputation、complaint、bounce、compliance notice |
250 OK 只证明对方邮件服务器接收了消息。Inbox placement 发生在这一步之后。反过来,ESP 标记 rejected 时,邮件可能从未离开发送平台。没有 raw SMTP response 和完整 headers,所有「被封原因」都只到猜测级别。
因此一次可复现的诊断至少要拿到五项数据:provider message state、SMTP response、完整 headers、发送 domain/IP/stream、收件 ISP。关键词扫描可以排在后面。
三、关键词有影响,但名单和反馈更重
Mandrill 会检查 denylisted URL、shortened URL 和常见 spam phrase。Gmail 也要求 subject、display name、headers 和链接准确,不得伪装 reply、forward 或 verified identity。这些规则都值得遵守。
但敏感词清单解决不了主要风险。现代过滤系统会持续观察:
- 收件人是否真正 opt-in,发送方能否证明 consent;
- complaint、hard bounce、unsubscribe 与 inactive recipient;
- 是否突然放量,或者停发几个月后一次性唤醒旧名单;
- From、DKIM、SPF/Return-Path、sending IP 和 tracking domain 的历史;
- 邮件内容是否符合用户当初授权的用途;
- shared IP pool 里其他发件人的行为。
Google 给出的 operational target 很具体:Postmaster Tools 中的 spam rate 保持在 0.1% 以下,避免达到 0.3%。Yahoo 对 bulk sender 同样要求 complaint rate 低于 0.3%。这类指标由真实用户反馈产生,改掉 subject 里的 FREE 无法抵消一批未经授权的旧名单。
内容卫生是门槛,permission 和 recipient feedback 才是长期信誉。
四、Open Rate 能看,但不能当裁判
Mandrill 的 open tracking 会在 HTML 邮件底部加入 1×1 pixel。客户端加载图片,系统记录一次 open。Click tracking 则改写链接,点击先经过 tracking endpoint,再跳到原始目标。
Resend 的机制相同,但它默认关闭 open/click tracking。官方建议主要对 Broadcasts 开启 open tracking,避免 inbox provider 把 Transactional Email 识别成 marketing;开启后可以使用自有 tracking subdomain,例如 links.updates.example.com。
Cloudflare Email Service 截至 2026-08-15 仍把 outbound sending 标为 Beta,产品定位集中在 transactional email。公开事件覆盖 delivered、deferred、bounced、rejected、failed 和 complained;当前官方 sending event 文档没有列出 opened/clicked。若自行实现 tracking,需要承担 pixel、redirect、隐私披露、bot filtering 和链接长期可用性。
我此前在《用 Cloudflare + Resend 打造无限邮箱》里写的是小规模身份与收发闭环。Campaign 再往前一步,问题已经从「能不能发」切换成「谁允许你发、收到后如何反馈、坏信号怎样停止扩散」。
Open Rate 本身还有三个系统误差:
- image proxy 和预加载会制造假打开;
- 用户关闭图片会制造漏报;
- 安全扫描器会自动访问 tracking pixel 和链接。
Google 明确表示它不跟踪 open rate,也无法验证第三方 open 数据。指标优先级应该调整成:
complaint / bounce / deferral
→ click
→ product conversion
→ open
Open 适合看同一发送流中的趋势和实验方向,不适合证明 Inbox placement,更不适合成为唯一的 Campaign KPI。
五、Sender Reputation 没有固定权重公式
外部工具经常给域名一个分数,但 Gmail、Yahoo、Microsoft 没有公开「根域 60%、子域 40%」这种比例。真实模型至少包含这些身份:
From domain
DKIM d= domain
SPF / Return-Path domain
Organizational domain
Sending IP / IP pool
Tracking and landing-page domains
Message stream
Recipient complaints and engagement
子域可以建立可操作的隔离边界,但隔离并不绝对。Gmail 计算 5,000/day bulk-sender 门槛时,会把同一个 primary domain 下的子域流量合并;一旦进入 bulk sender 分类,状态不会自动过期。与此同时,Google Postmaster Tools 支持把子域单独加入 dashboard,Yahoo 也建议用不同 IP 或 DKIM domain 分隔 marketing 与 transactional 流量。
域名年龄也只是一条弱信号。老域名可能从未稳定发过邮件,新子域也可以继承一部分品牌识别与 organizational-domain 上下文。真正有用的检查来自四组数据:
- Gmail Postmaster:spam rate、domain/IP reputation、authentication、delivery error;
- Yahoo Complaint Feedback Loop:真实 spam complaint;
- Microsoft SNDS/JMRP:主要面向拥有或控制 sending IP 的发件方;
- DMARC aggregate report:谁在代表域名发送、SPF/DKIM alignment 是否通过。
公开 blocklist spot-check 只能证明「检查时没有出现在这几个公开名单里」。它无法证明 Gmail Inbox placement 良好。
六、推荐架构:两条发送身份,两套控制面
一套稳健的初始结构可以长这样:
Transactional stream
From / DKIM: notifications.example.com
Return-Path: bounce.notifications.example.com
Tracking: open/click 默认关闭
Workload: password reset、receipt、reservation、security alert
Marketing stream
From / DKIM: updates.example.com
Return-Path: bounce.updates.example.com
Tracking: links.updates.example.com
Workload: newsletter、promotion、win-back、product announcement
域名只是第一层。两条流还需要分开 provider account/subaccount 或 message stream、DKIM、Return-Path、tracking domain、rate limit、suppression reason 和 kill switch。
Suppression 也要保留语义。用户退出某个 newsletter topic,Campaign 系统必须停止该 topic;这条记录不应阻止 password reset。Spam complaint 和 hard bounce 的处理更严,它们通常需要在更大范围内阻止继续发送。一个只有 email + suppressed=true 的表,迟早会把业务规则压扁。
可以把发送事件收进统一 control plane:
ESP webhook
→ signature verification + idempotency
→ append-only email_event
→ suppression service
→ ISP × stream × campaign dashboard
→ threshold alert / automatic pause
每条事件至少保留 provider message ID、stream、campaign、template、cohort、From/DKIM/Return-Path domain、recipient provider、SMTP code、classification 和 downstream conversion。Recipient 明文只保留业务真正需要的部分。
七、第一周应该做什么
Day 1:把事实拿全
- 导出一封正常邮件和一封失败邮件的完整 headers;
- 保存 raw SMTP response,不要只抄 UI 上的
failed; - 按 Gmail、Yahoo、Outlook 等 ISP 拆分 bounce 和 deferral;
- 核对 Campaign 有没有误走 Transactional 产品;
- 记录当前发送量、complaint、hard bounce 和 unsubscribe baseline。
Day 2–3:建立身份边界
- 为 Transactional 和 Marketing 建立不同 sending subdomain;
- 配置各自 DKIM 与 custom Return-Path;
- 验证 From、DKIM、SPF domain 的 DMARC alignment;
- DMARC 从
p=none+rua=开始观察合法发送源,再决定 enforcement; - 给 Marketing 配置 RFC 8058 one-click unsubscribe 与正文可见退订入口。
Day 4–7:控制放量
- 第一批只发最近有明确 engagement 的 cohort;
- 保持稳定发送速率,避免 burst;
- 设置 complaint、hard bounce 和 deferral pause threshold;
- 将 open tracking 限定在确有实验价值的 Campaign;
- 接入 Postmaster、FBL、DMARC report 与 provider webhook。
这里有一个必须接受的代价:拆分 sending identity 会增加 DNS、dashboard、suppression 和运营复杂度;新 domain/IP 还需要 warm-up。代价是真实的。继续共用一条管线的成本更隐蔽——一次低质量 Campaign 足以让验证码、收据和预约通知一起付账。
八、它不解决什么
架构隔离不会修复一份未经授权的名单,也不会把失去兴趣的用户重新变成 engaged recipient。SPF、DKIM、DMARC 全绿只能证明身份可信,无法证明内容受欢迎。Dedicated IP 也没有天然优势;发送量不足时,它缺少稳定历史,warm-up 和日常维护都由自己承担。
法律边界同样需要单独判断。CAN-SPAM、GDPR、CASL 以及不同地区的 privacy/marketing 规则并不完全一致。这里给出的是工程与 deliverability control,不构成法律意见。
九、三个反直觉的收获
- Provider 选型排在流量分类之后。 Mandrill、Resend、Cloudflare 都能发送邮件,但产品边界决定了哪类流量可以进入哪条管线。
- Open Rate 排在 complaint 和 conversion 之后。 Pixel 提供的是有噪声的 engagement proxy,收件方反馈和业务结果更接近真实目标。
- 子域隔离有用,但 primary domain 仍然存在。 Gmail 会合并计算 bulk-sender 门槛,品牌下的坏流量无法靠改一个 hostname 完全切断关系。
十、未关闭的循环
这套框架还缺三类现场数据:真实 ISP 分布、现有 DKIM/SPF alignment、各 cohort 的 complaint 与 conversion。没有这些数据,我不会给具体 warm-up 日程,也不会推荐 shared IP 或 dedicated IP。
重访触发条件很明确:任一 stream 的 Gmail spam rate 接近 0.1%、hard bounce 连续上升、4xx deferral 出现 ISP 集中,或者 Transactional 的 p95 delivery latency 被 Campaign 发送窗口拉高。触发后先收缩 cohort 和发送速度,再讨论模板与 provider 迁移。
References
- Mailchimp Additional Terms — Transactional Email (formerly Mandrill) — verified 2026-08-15
- Mailchimp Transactional — Reputation and Rejections — verified 2026-08-15
- Mailchimp Transactional — Activity and Reports — verified 2026-08-15
- Google Email Sender Guidelines — verified 2026-08-15
- Google Email Sender Guidelines FAQ — verified 2026-08-15
- Google Postmaster Tools — verified 2026-08-15
- Yahoo Sender Best Practices — verified 2026-08-15
- Resend Open and Click Tracking — verified 2026-08-15
- Cloudflare Email Service — verified 2026-08-15
- Cloudflare Email Sending Events — verified 2026-08-15