跳转到内容
搜索文档

使用 Postmark 发送邮件

最后更新 查看 MarkdownAgent 设置

在本教程中,你将学习如何使用 Postmark 从 Workers 发送事务性邮件。完成本教程后,你将能够:

  • 创建用于发送邮件的 Worker。
  • 注册 Postmark 并将 Cloudflare 域名添加到 Postmark。
  • 使用 Postmark 从 Worker 发送邮件。
  • 使用密钥(secret)安全存储 API 密钥。

前置条件

要继续本教程,你需要:

创建 Worker 项目

首先使用 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 账户,可在此注册免费账户。注册后,检查收件箱中的链接以确认发件人签名。这将验证并允许你从已注册的邮箱地址发送邮件。

要从域名上的其他地址发送邮件,在 Postmark 仪表板中导航到 Sender Signatures,选择 Add Domain or Signature > Add Domain,输入域名并点击 Verify Domain

接下来,你会看到需添加到 Cloudflare 域名的 DNS 记录列表。在 Cloudflare 仪表板中选择先前输入的域名,导航到 DNS > Records。将 Postmark 的 DNS 记录(DKIM 和 Return-Path)复制/粘贴到 Cloudflare 域名。

向 Cloudflare 域名添加 DNS 记录的图像

完成后,返回 Postmark 并点击 Verify 按钮。若所有记录配置正确,域名状态应更新为 Verified

Postmark 仪表板上的域名验证图像

要获取 API 令牌,导航到 Servers 标签页,然后 My First Server > API Tokens,将 API 密钥复制到安全位置。

从 Worker 发送邮件

最后一步是在 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 令牌移至 Secrets

API 密钥和令牌等敏感信息应始终存储在密钥(secret)中。所有密钥均经过加密以提供额外保护。因此,建议将 API 令牌移至 secret,并从 Worker 的 environment 中访问。

要为本地开发添加密钥,创建 .dev.vars 文件,其工作方式与 .env 文件完全相同:

POSTMARK_API_TOKEN=your_postmark_api_token_here

还要通过运行以下命令确保 secret 已添加到已部署的 Worker:

Add secret to deployed Workersh
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 部署此更新。

相关资源

这篇文档对您有帮助吗?