前言
最近又折腾了一下邮件订阅系统。
最新版本的邮件订阅地址:草梅友仁的博客订阅
上一次迁移邮件订阅系统还要追溯到去年,在 2024-01-09 如何迁移 Newsletter 到 phplist 中就已经迁移过一次邮件订阅系统。
而这次总算下定决心,改成 listmonk 了,使用了自部署版本。
至于为什么,且容我慢慢道来。
首先是第一个问题:phpList API 仅支持付费用户。
官方版本的发件额度只有每月 300 封不说,还不能直接调用 API 来创建邮件。
然后是第二个问题:
通过 RSS 订阅来生成新邮件的功能一直不可用,至少我个人尝试下来就没成功过。
最后则是一个更主观的看法,那就是 phpList 的界面实在有点陈旧。
主观感觉 PHP 项目都有类似的风格,可以说是一个时代的网站风格。
当然还有一些细节问题,例如简体中文的翻译是一坨的问题。
鉴于 phpList 有种种问题,因此迁移邮件订阅系统也要提上日程了。
界面展示
经过各方面的调研,listmonk 进入我的视野。
首先是 listmonk 有着现代网页的设计风格,界面看起来十分舒适。
其次,还有着完善的多语言翻译,对中文支持也非常好。
然后就是一些邮件订阅系统的核心功能了:订阅列表、用户列表和营销邮件列表。
在之前试用过一些邮件订阅系统,普遍存在着限制订阅列表数量、限制订阅用户数量等问题。
而对 listmonk 来说,这一切都不是问题!
只要你的数据库够大,listmonk 可以存放无限制的列表、用户等数据。
部署
既然那么优秀,listmonk 又要怎么部署呢?
更多部署方式可参考 installation
在这里使用 Docker 部署。
创建一个 config.toml
文件作为配置文件。
1 | [app] |
创建一个 docker-compose.yml
文件,并挂载 config.toml
配置文件。
完整的 docker-compose.yml
配置参考如下:
1 | version: "3.7" |
然后执行
1 | docker-compose up -d |
命令启动。
随后就可以访问 127.0.0.1:9000
端口访问了(如果在本地部署,在服务器部署则是服务器 IP)。
使用
先前只是简单展示了下页面,接下来聊聊使用上的细节。
创建列表
首先是创建列表。
列表在 listmonk 中是用来管理用户订阅的,每个列表中都存在若干用户。这样一来就可以指定邮件发送的对象,从而实现用户分类。
对博客订阅而言,一般是公开类型(毕竟不公开,用户怎么订阅),加入方式则是 单选订阅
或 双重选择加入
均可(两者区别在于是否要用户确认)。
在创建完列表后,就要发布订阅页面了。
listmonk 中,可以在表格中查看公开的订阅列表。
草梅友仁的博客订阅地址如下:https://listmonk.cmyr.dev/subscription/form
启用验证码
你可能注意到另一个问题,如果订阅页面是公开的,那岂不是很容易被攻击?
实际上,在一开始的时候,我就遇到了这样的问题。
订阅列表中出现了很多随机字符的邮箱,一看就不是真实用户。
因此,需要增加验证码来避免虚假用户注册(当然,刻意留了假邮箱的还是管不了的)
在 listmonk 中,可以通过 设置
页面来启用验证码。
验证码服务由 hCaptcha 提供支持。
hCaptcha 提供每月一百万个请求的免费额度,对一般小网站来说是够用的了。
设置 SMTP 服务器
SMTP 是最终负责把邮件发送到用户邮箱的服务。
如果不设置的话,你的邮件就到不了用户邮箱。
在这里,本人使用 resend 作为发件服务。
就免费版而言,resend 提供了每日不超过 100 封、每月不超过 3000 封的发件额度。
这个额度虽然不是很多,在对新人来讲已经足够了,如果真有需要,再迁移到更加便宜的发件渠道(个人使用下来是已经够了)。
然后就是使用 resend 的 SMTP 服务有几个注意事项。
listmonk 默认设置的端口、身份验证协议、TLS 协议均需要修改,实测要以图上为准,不然会出现发件失败的问题。
即 端口 587 或 2587,身份验证协议 LOGIN,TLS 协议 STARTTLS。具体参考 SMTP Credentials
测试发件渠道
到这一步,就可以测试连接了。
如果你出现了类似 subscriber 3: 450 Invalid literal value, expected ""
的问题,请尝试关闭 包括 List-Unsubscribe 标头
选项。
目前这个问题还在排查中,不能确定是 listmonk 的问题还是 resend 的问题,具体可关注该 issue #2229。
如果一切顺利的话,你应该可以在测试邮箱中收到发件。
通过 API 创建邮件
当然,最后还有一个我心心念念的东西:通过 API 创建邮件。
在 listmonk 中,通过 REST API 即可创建新的邮件。
例如:
1 | curl -u "api_user:token" 'http://localhost:9000/api/campaigns' -X POST -H 'Content-Type: application/json;charset=utf-8' --data-raw '{"name":"Test campaign","subject":"Hello, world","lists":[1],"from_email":"listmonk <noreply@listmonk.yoursite.com>","content_type":"richtext","messenger":"email","type":"regular","tags":["test"],"template_id":1}' |
结果:
1 | { |
总结
以上就是通过 listmonk 自建邮件订阅系统的基本流程和使用方式,如有疏漏,欢迎指正。
本文作者:草梅友仁
本文地址: https://blog.cmyr.ltd/archives/listmonk-email-subscription-system-guide.html
版权声明:本文采用 CC BY-NC-SA 4.0 协议 进行分发,转载请注明出处!