自建SMTP vs. Mailchimp

本文的目标不是绕过垃圾邮件过滤器或发送垃圾邮件。 目标是观察当你试图复制 Mailchimp 的做法但缺少其基础设施时,什么会开始出问题。

自建SMTP vs. Mailchimp
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI模型价格对比 | AI工具导航 | ONNX模型库 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

这个项目纯粹出于好奇心。我想了解像 Mailchimp 这样的邮件服务提供商如何发送冷邮件和促销邮件,它们如何管理 IP 信誉、DNS 和路由,以及为什么邮件投递对基础设施决策如此敏感。

为了回答这些问题,我使用 Postal 搭建了一个本地 SMTP 服务器,通过 Cloudflare Tunnel 进行外部暴露,并在 Gmail、Outlook 和 Hostinger 上测试了真实世界的投递情况。

本文是一个实战逐步演练,记录了什么有效、什么失败了,以及为什么邮件基础设施是这样设计的

0、为什么做这个项目

重要澄清:

Gmail 最初并没有阻止邮件。

目标不是绕过垃圾邮件过滤器或发送垃圾邮件。 目标是观察当你试图复制 Mailchimp 的做法但缺少其基础设施时,什么会开始出问题

我想了解:

  • 为什么 ESP(邮件服务提供商)坚持使用静态 IP
  • 为什么 Return-Path 和 rDNS 如此重要
  • 为什么入站和出站邮件要分开
  • 为什么仅靠 Cloudflare 对 SMTP 不够

学习这些的唯一方法就是自己搭建

为了保持实验的真实性但又经济:

  • Postal — 开源邮件服务器
  • WSL (Ubuntu) — 本地 Linux 环境
  • Cloudflare Tunnel — 安全的公共暴露
  • Cloudflare DNS — 域名和邮件记录
  • 小型 VPS — 用于入站邮件处理的静态 IP

1、使用 WSL Ubuntu 在本地运行 Postal

我在本地机器的 WSL (Ubuntu) 中安装了 Postal

为什么用 WSL?

  • 快速设置
  • 原生 Linux 工具
  • 适合实验
  • 无需立即购买 VPS

此时的状态:

  • Postal UI 在本地运行
  • SMTP 服务器已激活
  • 一切在 localhost 上正常工作

但显然,没有外部邮件服务器能够访问到它

2、使用 Cloudflare Tunnel 暴露 Postal

我的 ISP 将我的机器放在 CGNAT 后面,这意味着:

  • 没有公共 IP
  • 无法端口转发
  • 没有直接入站访问

所以我使用了 Cloudflare Tunnel

Tunnel 设置:

postal.domain.com → localhost:5000

Postal 的 Web 界面运行在 端口 5000 上,所以我安全地暴露了它。

结果:

  • Postal UI 可通过 https://postal.domain.com 访问
  • 无需开放路由器端口
  • 流量完全加密

此时,控制面板已上线。

3、在 Postal 中创建 SMTP 服务器和发送域名

在 Postal 仪表板中:

  1. 创建了一个 SMTP 服务器
  2. 添加了一个 发送域名
  3. 生成了所需的 DNS 记录:
  • SPF
  • DKIM
  • Return-Path (RP)

所有记录都添加到了 Cloudflare DNS 并成功验证。

4、Gmail 和 Outlook 拒绝了邮件

然后我测试了向以下地址发送邮件:

  • Gmail
  • Outlook
  • Hostinger

Gmail 和 Outlook 在 SMTP 握手阶段就拒绝了邮件

拒绝日志清楚地显示:

发送 IP 被列入了 Spamhaus

这立即解释了行为:

  • Outlook 严重依赖 Spamhaus 阻止列表
  • Gmail 也是如此
  • 被列入列表的 IP 会导致硬拒绝,不管 SPF 或 DKIM 是否通过

这纯粹是一个 IP 信誉问题,不是配置错误。

为什么本地或共享 IP 会出现这种情况?

在我的案例中:

  • IP 属于 ISP 或共享环境
  • 我无法控制其历史
  • 之前的滥用已经破坏了信誉

这揭示了一个重要事实:

邮件提供商信任的是IP 历史,而不是你的意图。

5、Hostinger 软失败和 Return-Path 发现

Hostinger 的行为不同。

它没有直接拒绝邮件,而是软失败了投递。

日志显示:

rp.portal.domain.com does not resolve to a valid IP

这直接指向了 Return-Path 域名

6、为什么 Return-Path 会破坏本地 SMTP 设置

Return-Path 对于以下功能至关重要:

  • 退信处理
  • 信誉追踪
  • SMTP 信任验证

在我的设置中:

  • rp.portal.domain.com 指向我的本地机器
  • 我的本地机器:
  • CGNAT 后面
  • 没有静态 IP
  • Cloudflare Tunnel:
  • 无法暴露 端口 25
  • 无法提供 PTR / rDNS

这是一个硬技术限制,不是配置错误。

为什么 Cloudflare Tunnel 对 SMTP 不够?

Cloudflare Tunnel 非常适合:

  • Web 仪表板
  • API
  • 控制面板

SMTP 是基础设施密集型的

  • 端口 25 必须可直接访问
  • 静态 IP 是必须的
  • 反向 DNS (PTR) 是必需的
  • 信誉是基于 IP 的

这就是为什么 ESP 不会完全在 Tunnel 后面运行 SMTP。

7、分离出站和入站(像真正的 ESP 一样)

解决方案是架构层面的,不是战术层面的。

最终架构:

Outbound Emails
→ Local Postal (via Cloudflare Tunnel)
Inbound Emails / Return-Path / Bounces
→ VPS with Static IP

为什么需要 VPS?

  • 公共静态 IP
  • 正确的 PTR(反向 DNS)
  • 允许端口 25
  • 行业标准的入站处理

我更新了 DNS:

rp.portal.domain.com → VPS IP

结果:

  • Hostinger 不再软失败
  • SMTP 信任提升
  • 行为与真正的 ESP 一致

为什么 Mailchimp 和 ESP 是这样构建的?

这个实验说明了一切:

  • 控制面板可以是动态的
  • SMTP 平台必须是稳定的
  • 入站邮件对信誉至关重要
  • IP 所有权比软件更重要

Mailchimp 不是"打败垃圾邮件过滤器"——它是正确地设计了基础设施

8、本次实验的关键收获

  1. Spamhaus 列表 = 立即被拒绝
  2. Gmail 和 Outlook 的行为是一致且正确的
  3. 仅靠 SPF/DKIM 不能保证投递
  4. Return-Path 是不可或缺的
  5. Cloudflare Tunnel ≠ SMTP 解决方案
  6. CGNAT 会破坏入站邮件
  7. 静态 IP 是必须的

这个设置非常适合你,如果你:

  • 想深入理解邮件系统
  • 正在构建 SaaS 或 ESP
  • 更看重架构而非捷径

不适合:

  • 只想快速发送事务性邮件
  • 不想管理 IP 信誉

9、结束语

这个项目不是为了发送垃圾邮件或绕过 Gmail。

它是为了理解为什么邮件基础设施很困难——以及为什么像 Mailchimp 这样的平台存在。

搭建了这个之后,我不再把邮件看作"只是 SMTP"。

这是分布式信任工程


原文链接: How I Built a Local SMTP Server Using Postal and Cloudflare to Understand How Mailchimp Really Works

汇智网翻译整理,转载请标明出处