跳过正文
  1. 文章/

给 Artalk 加上邮件通知,也给评论区换了一套表情

作者
yellow13441
HLSay

今天继续折腾了一下博客的评论区,主要完成了两件事:

  • 给 Artalk 接上邮件通知,不需要等到我主动打开后台才能看到新评论和回复;
  • 重新整理表情包,并单独建了一个 GitHub 仓库来维护自己喜欢的 OwO 格式表情包合集。

用 Resend 给 Artalk 发送通知邮件
#

这次选择的是 Resend。它常被称作面向开发者的 Email API,不过 Artalk 本身已经支持 SMTP,所以这里没有另外写接口调用代码,而是直接使用 Resend 提供的 SMTP Relay。

换句话说,Artalk 负责生成和触发通知邮件,Resend 负责把邮件投递出去

免费套餐够个人博客使用
#

截至 2026 年 8 月,Resend 的免费套餐包含:

  • 每月 3000 封事务邮件;
  • 每天最多 100 封;
  • 最多可添加 3 个域名。

具体额度可以在 Resend PricingAccount Quotas and Limits 中查看。对于评论量不大的个人博客,这个额度已经比较宽裕。

需要注意的是,Resend 的月额度同时统计发送和接收的邮件;同一封邮件如果有多个收件人,也会按收件人数分别计数。

Resend 需要自己的域名
#

正式向其他人发送邮件前,需要在 Resend 中验证一个自己拥有的域名。基本流程很简单:

  1. 注册 Resend,进入 Domains 添加域名;
  2. 按页面提示在 DNS 服务商处添加 SPF 和 DKIM 记录;
  3. 等待域名状态变成 Verified;
  4. 创建 API Key;
  5. 把 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: true

Resend 的 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 新建了一个仓库:

yellow13441/hlsay-emoticons

核心文件是 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 服务发出通知;在评论区互动时,有一套自己挑选和维护的表情包可以用。