教程 / 后端集成 / 使用 Postmark 发送事务性邮件
📝 文字 ● 初级 更新于 2026-05-13

使用 Postmark 发送事务性邮件

Postmark 的核心卖点只有一个:送达率。他们主动审查发件方,拒绝营销邮件,并为事务性流量使用独立 IP。Postmark 发出的邮件比任何通用服务商都更可靠地落入收件箱——代价是略高的单封邮件费用。

什么时候选 Postmark

0
  • 选 Postmark 的场景——收件箱落地率是第一优先级时。密码重置、魔法链接、收据等任何落入垃圾箱都会造成真实损失的邮件。
  • Resend——单封邮件价格更低,且支持 React Email 模板。
  • SendGrid——需要企业级发送量或子账号体系时。
  • AWS SES——已在使用 AWS,且每千封邮件只需 $0.10。
  • Postmark 明确禁止在其事务性服务器上发送营销邮件。如果同时需要发送简报,请使用独立的营销服务商(如 Loops、Customer.io),或将 Postmark 账号拆分为事务性流和广播流。

注册账号

1

前往 postmarkapp.com ↗ 注册。免费套餐:每月 100 封邮件,永久有效。试用版:每月 100 封,之后 $15/月可发 10K 封。

创建一个 Server——Postmark 对项目的称呼。每个 Server 有独立的 API 令牌。常见做法:每个环境(生产、预发布)各一个 Server。

验证发件域名

2

在验证所有权之前,Postmark 不允许你从 @yourdomain.com 发送邮件。进入 Server → Sender Signatures → Add Domain

在你的 DNS 服务商添加三条记录:

  • DKIM(TXT 记录)——密码学签名,证明邮件来自授权服务器。
  • Return-Path(CNAME)——退信的目的地,完整送达率必需。
  • SPF(TXT 记录,通常已存在——Postmark 会给出需要添加的 include 指令)。

Postmark 会自动验证,通常 30 分钟内变绿。

可选:同时添加 DMARC。Postmark 提供了一个很好用的免费 DMARC 分析工具 ↗,每周会通过邮件发送报告。

获取 API 令牌

3

进入 Server → API Tokens,复制 Server API token

POSTMARK_SERVER_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

注意区分 Account API token(用于管理 Server,不用于发送邮件)。你的应用使用的是 Server token。

安装 SDK

4
npm install postmark

其他语言:Python、Ruby、PHP、Java、Go、.NET ↗。也可以直接使用纯 HTTP——API 接口面积很小,都是 JSON。

发送第一封邮件

5
import { ServerClient } from "postmark";

const client = new ServerClient(process.env.POSTMARK_SERVER_TOKEN);

await client.sendEmail({
  From: "[email protected]",
  To: "[email protected]",
  Subject: "Hello from Postmark",
  TextBody: "Plain text version",
  HtmlBody: "<p>HTML body</p>",
  MessageStream: "outbound",   // "outbound" = 事务性;默认值
});

检查收件人收件箱。如果收到了,就大功告成。如果没收到,Postmark 控制台 → Activity 会显示每次发送尝试的状态及收件服务器的响应。

使用模板

6

对于需要反复发送的邮件(欢迎邮件、密码重置、收据),使用 Postmark Templates——无需重新部署应用,直接在控制台编辑。

进入 Server → Templates → Create template。Postmark 使用 Mustache ↗ 语法来插入变量:

<p>Hi {{name}},</p>
<p>Click here to verify: {{verifyUrl}}</p>

通过 ID 或别名发送:

await client.sendEmailWithTemplate({
  From: "[email protected]",
  To: user.email,
  TemplateAlias: "welcome",   // 或 TemplateId: 12345
  TemplateModel: {
    name: user.name,
    verifyUrl: `https://yourapp.com/verify/${token}`,
  },
});

如果想要更好的模板开发体验,开源的 MJML ↗ 语言可以编译为邮件安全的 HTML,并与 Postmark 模板完全兼容。Postmark 还提供了免费的预设计模板 ↗供直接导入使用。

配置消息流(事务性 vs 广播)

7

Postmark 将事务性邮件(一对一,响应用户操作)与广播邮件(一对多,如简报)区分开来。两者使用不同的 IP 池,确保一次糟糕的广播不会污染你的事务性声誉。

  • Outbound(默认)——事务性邮件,包括密码重置、收据、魔法链接。
  • Broadcast——简报或"通知所有用户"的批量邮件。

如果只发事务性邮件,无需配置此项。如果同时需要广播,创建第二个消息流,并在对应发送调用中传入 MessageStream: "broadcast"

追踪打开、点击与退信

8

进入 Server → Settings → Tracking,切换以下选项:

  • 打开追踪——在邮件中嵌入 1×1 像素图片,邮件被打开时触发。对参与度指标有用;但许多用户(及部分邮件客户端)会屏蔽。
  • 点击追踪——通过 Postmark 重写所有 URL。对点击率统计有用;在某些特殊情况下可能导致 URL 失效。

对于密码重置或魔法链接邮件,请关闭点击追踪——它会重写 URL,而部分邮件客户端会预取 URL,可能意外消耗掉一次性令牌。

通过 Webhook 监听退信

9

进入 Server → Webhooks → Add webhook,选择事件类型:退信、垃圾投诉、打开、点击、送达。Postmark 会以 POST 请求将事件详情发送到你的 URL。

最重要的一点:对硬退信地址进行屏蔽处理。持续向无效地址发送邮件是损害发件声誉最快的方式。Postmark 客户端支持查询屏蔽列表,退信 Webhook 会提供结构化的事件数据供你处理。

Webhooks 文档 ↗

常见错误

10
  • "Sender signature not confirmed"——域名尚未完成验证。等待 DKIM/Return-Path 生效,或重新触发验证。
  • "Inactive recipient"——该地址曾经退信或被标记为垃圾,Postmark 已将其屏蔽。如果确认该地址安全,可在控制台手动解除屏蔽。
  • "Approval required"——Postmark 对新账号设有审核流程,在通过前会限制发送量。有时会就使用场景追加提问。
  • "Account locked"——Postmark 检测到疑似营销邮件或垃圾发送行为,他们对此非常严格。请参阅可接受使用政策 ↗
Postmark 对可接受使用有严格规定。他们会人工审核账号,对任何在事务性流中发送营销邮件的账号,会毫不犹豫地暂停服务——这是维护他们声誉的必要手段。如果不确定自己的使用场景是否符合要求,请在注册前阅读使用政策 ↗

定价说明

11

免费套餐:每月 100 封,永久有效。

付费套餐:从 $15/月起,包含 10K 封邮件,超出后按比例计费。Postmark 定价 ↗

单封邮件成本大约是 Resend 的 2–3 倍,AWS SES 的 10 倍。你为的是送达率——在独立的收件箱落地测试中,Postmark 的表现始终名列前茅。

官方参考资料

下一步