通过 Clouflare Worker 免费发送电子邮件 (附邮件发送部署服务)

2022 年 5 月 13 号,Cloudflare 发布了一篇博客 ,宣布与电子邮件安全公司 Mailchannels 合作。

这次合作中,MailChannels 专门为 Cloudflare Workers 创建了一项电子邮件发送服务,降低了 Cloudflare Workers 发送电子邮件的门槛。 然而更值得高兴的是,发送电子邮件是完全免费的。你没听错“完全免费!!!”

通过该电子邮件发送服务 我们可以发送交易电子邮件,例如交易订单、用户注册确认、密码重置。 也应该能够发送营销邮件。

让我们看看怎么使用它。

前置条件

  • 一个 Cloudflare 帐户
  • 一个可以被 Cloudflare 管理的域名
  • npm 软件包 create-cloudflare
  • git
  • openssl(可选)

为你的 Clouflare 帐户启用 MailChannels

首先,找到您的帐户 workers.dev子域:

  1. 登录 Cloudflare 仪表板 并选择你的帐户。
  2. 选择 工作人员和页面 > 概述 。
  3. 在概述的右侧 ,记下您的 workers.dev 子域 。类似于 myaccount.workers.dev

当你找到你的 workers.dev子域,添加 MailChannels DNS 记录:

  1. 在 “帐户主页” 中,选择您要为其添加 SPF 记录的网站。

  2. 选择 DNS > 记录 > 添加记录 。

  3. 添加以下 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 电子邮件路由:

  1. 在 “帐户主页” 中,选择您要为其添加 SPF 记录的网站。

  2. 选择 DNS > 记录 > 添加记录 。

  3. 添加以下 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调用服务

  1. 克隆该项目

    git clone https://github.com/devcxl/cloudflare-email-sender

  2. 修改 wrangeler 配置

    wrangler.example.toml 重命名为 wrangler.toml

    修改wrangler.toml配置中的SENDER_EMAILSENDER_NAME

  3. 部署

    1. 运行npm i安装依赖。
    2. 运行npm run deploy并根据提示登陆你的 Cloudfalre 账号并部署
    3. 运行openssl rand -base64 32生成随机密钥
    4. 运行npx wrangler secret put ACCESS_TOKEN设置访问随机密钥

使用示例

  1. 发送自定义邮件
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"
}'
  1. 发送模板邮件
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"
}'

相关文档

46 个赞

感兴趣的可以点个star

2 个赞

常规话题软件分享

感谢大佬

2 个赞

感谢大佬

3 个赞

Mark

2 个赞

mark一哈

1 个赞

感谢,正好需要

1 个赞

感谢大佬,每天学习一下

一直在找发邮件的方法 终于有了

大佬,是可以自定义名字和发信邮箱吗?

Yeah

快去点个Star!!!

貌似没办法更新帖子了, 通知下: 添加DKIM支持了!!!

1 个赞

感谢大佬分享

先收藏一波,以后会用的到

mailchannel要不跟cf合作了肿么办:sob:

可以换其他邮件发送服务商的

好,smtp发多了发不要出去 这个有数量限制吗

Cloudflare免费账户有十万次的请求限制 最好不要滥发