今天继续折腾了一下博客的评论区,主要完成了两件事:
- 给 Artalk 接上邮件通知,不需要等到我主动打开后台才能看到新评论和回复;
- 重新整理表情包,并单独建了一个 GitHub 仓库来维护自己喜欢的 OwO 格式表情包合集。
用 Resend 给 Artalk 发送通知邮件#
这次选择的是 Resend。它常被称作面向开发者的 Email API,不过 Artalk 本身已经支持 SMTP,所以这里没有另外写接口调用代码,而是直接使用 Resend 提供的 SMTP Relay。
换句话说,Artalk 负责生成和触发通知邮件,Resend 负责把邮件投递出去。
免费套餐够个人博客使用#
截至 2026 年 8 月,Resend 的免费套餐包含:
- 每月 3000 封事务邮件;
- 每天最多 100 封;
- 最多可添加 3 个域名。
具体额度可以在 Resend Pricing 和 Account Quotas and Limits 中查看。对于评论量不大的个人博客,这个额度已经比较宽裕。
需要注意的是,Resend 的月额度同时统计发送和接收的邮件;同一封邮件如果有多个收件人,也会按收件人数分别计数。
Resend 需要自己的域名#
正式向其他人发送邮件前,需要在 Resend 中验证一个自己拥有的域名。基本流程很简单:
- 注册 Resend,进入 Domains 添加域名;
- 按页面提示在 DNS 服务商处添加 SPF 和 DKIM 记录;
- 等待域名状态变成 Verified;
- 创建 API Key;
- 把 SMTP 参数填入 Artalk。
Resend 官方建议使用单独的子域名隔离发信信誉。我这次使用的是类似 mail.example.com 这样的发信子域名。域名验证完成后,可以直接使用该域名下的地址发信,不必先在 Resend 中逐个创建邮箱地址。详细说明见 Managing Domains。
API Key 只在创建时完整显示一次,应当放进服务器的密钥文件或环境变量,不要写进公开仓库、文章或截图。
Artalk 要选择 SMTP 发送方式#
Resend 给的是 API Key,但在 Artalk 里需要选择的发送方式仍然是 smtp,这个 API Key 在这里充当 SMTP 密码。
配置思路如下,示例中的域名和密钥需要替换成自己的:
email:
enabled: true
send_type: smtp
send_name: '{{reply_nick}}'
send_addr: noreply@mail.example.com
smtp:
host: smtp.resend.com
port: 587
username: resend
password: <RESEND_API_KEY>
admin_notify:
email:
enabled: trueResend 的 SMTP 参数是:
- Host:
smtp.resend.com - Port:
587(STARTTLS),也可以根据需要使用官方支持的其他端口 - Username:固定为
resend - Password:在 Resend 中创建的 API Key
完整参数见 Resend SMTP 文档。Artalk 这边除了打开全局邮件开关,还要启用管理员邮件通知;否则 SMTP 能用,也不会在新评论出现时给管理员发信。Artalk 支持在控制中心、配置文件或环境变量中完成设置,参考 Artalk 邮件通知文档。
我实际使用的是 smtp.resend.com:587,发件地址需为已在Resend验证的自有域名,密钥只保存在服务器端,不进入 Git。
国内云厂商也有邮件代发服务#
如果更在意国内控制台、人民币结算或本地技术支持,也可以考虑阿里云邮件推送和腾讯云邮件推送。它们都支持 SMTP,接入 Artalk 的整体思路类似。
截至 2026 年 8 月,几种低用量方案大致如下:
| 服务 | 免费额度 | 超出后的按量价格 | 备注 |
|---|---|---|---|
| Resend Free | 每月 3000 封,每天最多 100 封 | 免费套餐不能超额续发 | 需要验证自有域名 |
| 阿里云邮件推送 | 主账号共 2000 封,每天最多免费 200 封 | 2 元 / 1000 封 | 免费额度不是每月重置 |
| 腾讯云邮件推送 | 账号共 1000 封,不限有效期 | 0.0019 元 / 封,约 1.9 元 / 1000 封 | 超出后按日结算 |
阿里云的价格和免费额度见 邮件推送计费方式,腾讯云的数据见 邮件推送价格说明。这些价格和规则以后可能调整,真正接入前最好再看一次官方页面。
对我的博客来说,目前评论邮件量很小,Resend 的免费套餐更省事,所以先用它跑起来。
给评论区换一套自己维护的表情包#
邮件通知解决的是“及时看到评论”,表情包解决的则是“评论时更好玩”。
Artalk 原生支持远程加载 OwO 格式表情包。直接引用别人维护的地址虽然方便,但分组、内容和可用性都不完全受自己控制。于是我在 GitHub 新建了一个仓库:
核心文件是 hlsay.json,目前整理了 Emoji、小黄脸、小电视、贴吧、抖音、小红书、小黑盒、热词系列、2233 娘、QQ、钉钉等分组。它遵循 OwO 的数据结构,Artalk 可以直接加载,不需要再做格式转换。
在 Artalk 中加载#
我通过 jsDelivr 引用仓库里的配置文件,在 artalk.yml 中只需要设置一项:
frontend:
emoticons: https://cdn.jsdelivr.net/gh/yellow13441/hlsay-emoticons@main/hlsay.json也可以在前端初始化 Artalk 时传入同一个地址:
Artalk.init({
// 其他配置……
emoticons: "https://cdn.jsdelivr.net/gh/yellow13441/hlsay-emoticons@main/hlsay.json",
})把表情配置独立成仓库以后,后续新增分组、修复失效图片或调整名称都更方便,也可以复用到其他兼容 OwO 格式的评论系统中。
需要留意的是,jsDelivr 会缓存 GitHub 文件。刚更新 hlsay.json 时,线上内容可能不会立刻变化;如果生产环境希望内容完全固定,也可以在 CDN 地址中指定 Git Tag 或 Commit。仓库 README 里已经整理了用法、预览和素材来源说明。
最后#
这次更新之后,评论区终于更像一个完整的交流空间了。
有新留言时,Artalk 会通过 Resend 的 SMTP 服务发出通知;在评论区互动时,有一套自己挑选和维护的表情包可以用。