在本教程中,你将学习如何使用 Postmark ↗ 从 Workers 发送事务性邮件。完成本教程后,你将能够:
- 创建用于发送邮件的 Worker。
- 注册 Postmark 并将 Cloudflare 域名添加到 Postmark。
- 使用 Postmark 从 Worker 发送邮件。
- 使用密钥(secret)安全存储 API 密钥。
要继续本教程,你需要:
- Cloudflare 账户 ↗(若尚未拥有)。
- 已注册的域名。
- 已安装 npm ↗。
- Postmark 账户 ↗。
首先使用 C3 在命令行中创建 Worker 项目,然后按提示操作:
npm create cloudflare@latest或者,你可以使用 CLI 参数加快流程:
npm create cloudflare@latest email-with-postmark -- --type=hello-world --ts=false --git=true --deploy=false这将创建一个简单的 hello-world Worker,内容如下:
export default {
async fetch(request, env, ctx) {
return new Response("Hello World!");
},
};若尚未拥有 Postmark 账户,可在此注册免费账户 ↗。注册后,检查收件箱中的链接以确认发件人签名。这将验证并允许你从已注册的邮箱地址发送邮件。
要从域名上的其他地址发送邮件,在 Postmark 仪表板中导航到 Sender Signatures,选择 Add Domain or Signature > Add Domain,输入域名并点击 Verify Domain。
接下来,你会看到需添加到 Cloudflare 域名的 DNS 记录列表。在 Cloudflare 仪表板中选择先前输入的域名,导航到 DNS > Records。将 Postmark 的 DNS 记录(DKIM 和 Return-Path)复制/粘贴到 Cloudflare 域名。
完成后,返回 Postmark 并点击 Verify 按钮。若所有记录配置正确,域名状态应更新为 Verified。
要获取 API 令牌,导航到 Servers 标签页,然后 My First Server > API Tokens,将 API 密钥复制到安全位置。
最后一步是在 Worker 中整合所有内容。在 Worker 中,使用 fetch 向 Postmark 的邮件 API 发起 POST 请求,并包含你的令牌和消息正文:
export default {
async fetch(request, env, ctx) {
return await fetch("https://api.postmarkapp.com/email", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Postmark-Server-Token": "your_postmark_api_token_here",
},
body: JSON.stringify({
From: "[email protected]",
To: "[email protected]",
Subject: "Hello World",
HtmlBody: "<p>Hello from Workers</p>",
}),
});
},
};要在本地测试代码,运行以下命令并在浏览器中访问 http://localhost:8787/ ↗:
npm start使用 npm run deploy 部署 Worker。
API 密钥和令牌等敏感信息应始终存储在密钥(secret)中。所有密钥均经过加密以提供额外保护。因此,建议将 API 令牌移至 secret,并从 Worker 的 environment 中访问。
要为本地开发添加密钥,创建 .dev.vars 文件,其工作方式与 .env 文件完全相同:
POSTMARK_API_TOKEN=your_postmark_api_token_here还要通过运行以下命令确保 secret 已添加到已部署的 Worker:
npx wrangler secret put POSTMARK_API_TOKEN添加的 secret 可通过传递给 Worker fetch 事件处理程序的 env 参数访问:
export default {
async fetch(request, env, ctx) {
return await fetch("https://api.postmarkapp.com/email", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Postmark-Server-Token": env.POSTMARK_API_TOKEN,
},
body: JSON.stringify({
From: "[email protected]",
To: "[email protected]",
Subject: "Hello World",
HtmlBody: "<p>Hello from Workers</p>",
}),
});
},
};最后,使用 npm run deploy 部署此更新。