前言
也许你需要为你的 Cloudflare 实现一个自动回复?
不管如何,我是需要的,但网络上资料又确实不多(至少我并未在中文互联网中找到),因而在此记录。
原理
理所当然也别无选择地,我们使用 Cloudflare Workers 下的 Email Workers 实现。
根据官方文档给出的回复方法,我们需要使用 mimetext 中的 createMimeMessage,因此没办法像上次一样直接在线编辑了,必须要在本地开发好后部署。
安装 Wrangler
Wrangler 是 Cloudflare 官方推出的命令行界面(CLI)工具,专门用于管理和开发 Cloudflare Workers 以及其他相关的开发者平台产品。
我们要在本地进行 Worker 的开发,所以先来安装 Wrangler,需要用到 npm。
npm install -g wrangler
安装完成后使用以下命令登录,在弹出的窗口中登录 Cloudflare 并授权。
wrangler login
创建项目
接着在你希望创建项目的目录下打开 cmd(用 powershell 可能因为禁止运行脚本而出错),新建项目。
wrangler init auto-reply
过程中需要回答一些问题,按照自己的情况选即可,使用方向键选择。
这里我们只是想实现一个邮箱自动回复,模版选择 Hello World example 的 Worker only 即可,语言推荐 JavaScript(文档使用的语言),其他的随意。
等待一段时间,项目目录就创建好了。
因为要使用 Node.js 库,因此需要修改项目配置,启用 Node.js 兼容。
项目目录下的 wrangler.jsonc 是项目配置文件,我们在里面添加:
"compatibility_flags": [
"nodejs_compat"
]
就完成项目配置了。
安装 mimetext 并编写代码
在项目目录下运行 cmd,输入命令安装。
npm install mimetext
然后修改 src/index.js 为下方代码,并修改注释标记的三处配置,就完成了。
import { EmailMessage } from "cloudflare:email";
import { createMimeMessage } from "mimetext";
export default {
async email(message, env, ctx) {
// 配置发件人信息
const senderName = "no-reply";
const senderAddress = "<SENDER>@example.com";
const msg = createMimeMessage();
msg.setHeader("In-Reply-To", message.headers.get("Message-ID"));
msg.setSender({ name: senderName, addr: senderAddress });
msg.setRecipient(message.from);
// 配置邮件标题和内容
msg.setSubject("自动回复");
msg.addMessage({
contentType: 'text/plain',
data: `我们已收到您的邮件`
});
const replyMessage = new EmailMessage(
senderAddress,
message.from,
msg.asRaw()
);
await message.reply(replyMessage);
// 当然,不能光回复,还要将邮件转发到你接受邮件的邮箱,这个邮箱需要在 Cloudflare Email Routing 里验证过
await message.forward("example@example.com");
}
}
部署
最后,在项目目录下运行以下命令部署到云端。
wrangler deploy
接着,打开你的 Cloudflare Dashboard,来到对应域名的 Email Routing 电子邮件路由页面,查看电子邮件 Workers,可以发现刚刚部署的已经出现在上面了,将其分配给对应的邮箱地址即可。
注意需要等待约半分钟才会生效。
可以给自己发一条邮件测试,发现成功收到了自动回复。
附录
参考文献
- 官方文档
- mgmgprndev/CloudflareEmailWorker_AutoReply 项目
- Cloudflare workers - 如何使用(起步篇)
- Cloudflare菩萨系列:workers 使用指南
- Wrangler 入门:开启你的 Cloudflare Serverless 之旅
- 官方文档 - Compatibility flags
版权信息
本文原载于 reincarnatey.net,遵循 CC BY-NC-SA 4.0 协议,复制请保留原文出处。