LetterDrop是一个由Cloudflare Workers驱动的安全高效的新闻通讯管理服务,可轻松创建、分发和管理新闻通讯的订阅。
我一直使用TinyLetter
向我的订阅者发送新闻通讯,但不幸的是,Mailchimp现在已经关闭了这项免费服务。这并不是我第一次面临这样的问题,每当这种情况发生时,我都会失去所有的订阅者,不得不寻找新的方式发送新闻通讯。为了避免这个反复出现的问题,我决定构建自己的免费新闻通讯服务。它需要零成本、易于使用且可靠,这样就不会被关闭。为此,我使用Cloudflare Workers创建了这项服务,并将其命名为LetterDrop。
/api/newsletter
端点发送POST请求来创建新闻通讯,如下所示:curl --request POST \ --url https://ld.i365.tech/api/newsletter \ --header 'CF-Access-Client-Id: <<CF-Access-Client-Id>>' \ --header 'CF-Access-Client-Secret: <<CF-Access-Client-Secret>>' \ --header 'content-type: application/json' \ --data '{ "title": "BMPI", "description": "BMPI每周新闻通讯", "logo": "https://www.bmpi.dev/images/logo.png" }'
/api/newsletter/:id/offline
端点发送PUT请求来下线新闻通讯,如下所示:curl --request PUT \ --url https://ld.i365.tech/api/newsletter/9080f810-e0f7-43aa-bac8-8d1cb3ceeff4/offline \ --header 'CF-Access-Client-Id: <<CF-Access-Client-Id>>' \ --header 'CF-Access-Client-Secret: <<CF-Access-Client-Secret>>'
注意: 这些API应该受Cloudflare零信任安全保护。这意味着你需要创建一个服务令牌并使用它来访问这些API。
只需访问新闻通讯页面并点击订阅或取消订阅按钮即可。例如:BMPI。
然后你将收到一封确认订阅或取消订阅的邮件。之后,当新闻通讯发布时,你就会收到。
注意: 新闻通讯页面链接模式为https://<<你的域名>>/newsletter/:id
。
LetterDrop使用Cloudflare Email Worker发送邮件。有一个ALLOWED_EMAILS
变量用于控制谁可以发送新闻通讯。你可以使用Cloudflare仪表板更新这个变量。
之后,你可以通过将新闻通讯内容发送到特定的电子邮件地址来发布新闻通讯。Email Worker将把新闻通讯发送给所有订阅者。
注意:
[Newsletter-ID:<<新闻通讯ID>>]<<你的新闻通讯标题>>
,例如[Newsletter-ID:9080f810-e0f7-43aa-bac8-8d1cb3ceeff4]BMPI每周新闻通讯 - 20240623
。要使用LetterDrop,你需要创建一个Cloudflare账户并部署Worker脚本。Worker脚本在app
目录中可用。你可以使用Cloudflare Workers仪表板部署Worker脚本。
注意: 你需要修改app/wrangler.toml
文件以使用你的配置值。
ALLOWED_EMAILS
:允许创建新闻通讯的电子邮件列表。目前LetterDrop使用AWS SES发送邮件。你需要创建一个AWS账户并配置SES以发送邮件。之后,你需要创建一个Cloudflare Worker作为通知服务。代码很简单,你可以使用ChatGPT生成代码。
LetterDrop使用Cloudflare Queues处理失败的邮件。你可以使用Cloudflare仪表板监控失败的邮件,并在死信队列中重新播放它们。
下一步是为LetterDrop添加更多功能。
我使用GPT-4o模型生成LetterDrop的代码。这意味着代码是由AI模型生成的,我只需要向模型提供提示。这种方法非常高效,可以节省大量时间。我还录制了一个视频来展示如何使用GPT-4o模型创建LetterDrop项目。
这也意味着你可以通过更改提示轻松定制代码。你可以在CDDR文件中找到提示。
即使我使用GPT模型生成代码,我仍然需要审查代码并进行测试。所以如果你发现任何问题或有任何建议,请随时创建issue或pull request。对于贡献没有任何限制,你可以自己或在GPT模型的帮助下为项目的任何部分做出贡献。