2022 年 5 月 13 号,Cloudflare 发布了一篇博客 ,宣布与电子邮件安全公司 Mailchannels 合作。
这次合作中,MailChannels 专门为 Cloudflare Workers 创建了一项电子邮件发送服务,降低了 Cloudflare Workers 发送电子邮件的门槛。 然而更值得高兴的是,发送电子邮件是完全免费的。你没听错“完全免费!!!”
通过该电子邮件发送服务 我们可以发送交易电子邮件,例如交易订单、用户注册确认、密码重置。 也应该能够发送营销邮件。
让我们看看怎么使用它。
前置条件
- 一个 Cloudflare 帐户
- 一个可以被 Cloudflare 管理的域名
- npm 软件包 create-cloudflare
- git
- openssl(可选)
为你的 Clouflare 帐户启用 MailChannels
首先,找到您的帐户 workers.dev
子域:
- 登录 Cloudflare 仪表板 并选择你的帐户。
- 选择 工作人员和页面 > 概述 。
- 在概述的右侧 ,记下您的
workers.dev
子域 。类似于myaccount.workers.dev
当你找到你的 workers.dev
子域,添加 MailChannels DNS 记录:
-
在 “帐户主页” 中,选择您要为其添加 SPF 记录的网站。
-
选择 DNS > 记录 > 添加记录 。
-
添加以下 TXT DNS 记录,替换
myaccount.workers.dev
与你自己的workers.dev
子域Type Name Content TXT _mailchannels v=mc1 cfid=myaccount.workers.dev cfid=yourdomain.com
yourdomain.com
应设置为 worker 自定义域的二级域名
添加 MailChannel 的 SPF 支持
要同时使用 MailChannels 和 Cloudflare 电子邮件路由:
-
在 “帐户主页” 中,选择您要为其添加 SPF 记录的网站。
-
选择 DNS > 记录 > 添加记录 。
-
添加以下 TXT DNS 记录:
Type Name Content TXT @ v=spf1 include:_spf.mx.cloudflare.net include:relay.mailchannels.net -all
编写发送邮件的 Worker 代码
export async function send(to, title, content, type = "text/html") {
const send_request = new Request("https://api.mailchannels.net/tx/v1/send", {
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify({
personalizations: [
{
to: [{ email: `${to}`, name: `${to}` }],
},
],
from: { email: "[email protected]", name: "Sender Name" },
subject: `${title}`,
content: [
{
type: `${type}`,
value: `${content}`,
},
],
}),
});
return await fetch(send_request);
}
注意 将
[email protected]
替换为你自己想要设置的发信地址。将Sender Name
设置为你想要设置的发信名
最后你可以通过引用该代码中的 send 方法在 Cloudflare Worker 中发送电子邮件
部署API调用服务
-
克隆该项目
git clone https://github.com/devcxl/cloudflare-email-sender
-
修改 wrangeler 配置
将
wrangler.example.toml
重命名为wrangler.toml
修改
wrangler.toml
配置中的SENDER_EMAIL
和SENDER_NAME
-
部署
- 运行
npm i
安装依赖。 - 运行
npm run deploy
并根据提示登陆你的 Cloudfalre 账号并部署 - 运行
openssl rand -base64 32
生成随机密钥 - 运行
npx wrangler secret put ACCESS_TOKEN
设置访问随机密钥
- 运行
使用示例
- 发送自定义邮件
curl -X POST -L https://yourdomain.com/v1/send \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-d '{
"to": "[email protected]",
"name": "Jone",
"title": "Just Test Message",
"content": "<h1>Hello This is test message</h1>",
"type": "text/html"
}'
- 发送模板邮件
curl -X POST -L https://yourdomain.com/v1/send/activation \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-d '{
"to": "[email protected]",
"name": "Example",
"title": "Just Test Message",
"site_name": "Test Title",
"url": "https://www.google.com/search?q=devcxl"
}'
相关文档
- https://community.cloudflare.com/t/send-email-from-workers-using-mailchannels-for-free/361973/63
- Sending email for free using Cloudflare Worker: Step By Step Tutorial | Fadhil Dev Blog
- How to Send Free Transactional Emails with worker-mailchannels via Cloudflare Workers | by Tristan Trommer | Medium
- Send Emails With Resend · Cloudflare Workers docs