Valine 评论系统通知邮件

麻了各种错误搞了一整天. 终于是搞好了, 暴风哭泣. 记一下踩过的坑.

记录一个无关问题.

首先有一个很重要的问题, 当时注册 LeanCloud 的时候没太放在心上, 就是注册的中国区账号, 虽然服务器在中国, 但是由于一些原因不如国际服务器好用. 所以第一步是把数据搬迁一下.

我的东西比较少, 就是一点点少的可怜的 valine 评论, 直接导出评论类:

/valine-sent-mail/img/export-data.jpg
导出json数据

导出以后可以试试导入, 然后你就会发现出大问题: 有一个叫 InsertAt 的数据在原表中的类型是 Date, 但导出的 json 文件里他是 "InsertAt": "xxxxx" 这样的. 然后再导入进取, 这一列数据类型就会变成 String! 什么鬼啊! 后来翻看文档, 发现 Date 数据在导出后应该是这样的(官方示例):

"publishedAt": {
  "__type": "Date",
  "iso": "2015-11-27T19:05:21.377Z"
},

照着这个样子批量修改 InsertAt 就可以了. 也不知道是不是我导出的姿势不对.

导出和导入都会给你的邮箱发邮件提醒. 如果导入的时候一直转圈圈, 那么看看邮件, 是不是导入失败, 失败的原因是什么. (屑网站连失败提醒都没有!) 我这里遇到的问题是 json 格式问题(因为我用 sublime 编辑了这个文件, 我的 sublime 有一个自动标点替换, 把中文的引号换乘了英文, 然后emmm).

不多说, 直接挂官方文档

注意几个点

  1. 是开启 IMTP,
  2. 允许其他软件登录
  3. 最后是记住 SMTP 的用户密码是 google 账号, SMTP 主机名是 smtp.gmail.com, 端口是 465

然后设置应用专用密码, 后续用这个密码登录 Gamil.

仓库地址

/valine-sent-mail/img/deploy.jpg
部署

下面这里输入 Valine-Admin 的仓库地址

https://github.com/zhaojun1998/Valine-Admin

当然可以把这个 fork 一下自己 DIY 然后用自己的地址, 以后再说叭.

/valine-sent-mail/img/deploy2.jpg
部署

然后他会开始启动, 途中会输出启动日志, 成功后如下所示:

/valine-sent-mail/img/finish-deploy.jpg
部署成功

然后就是设置变量, 对着README设置.

本人用的是 Gmail, 天杀的 SMTP 预设服务里的 Gmail 不知道是不是设置错了, 害得我搞了一整天, 也不知道哪里出了问题, 官网 issue 也没人提这个问题, 果然是 valine 被抛弃了啊. 所以需要手动设置 SMTP: 不要填 SMTP_SERVICE, 根据 Gmail官方文档 填上 SMTP_HOSTsmtp.gmail.comSMTP_HOST465.

如下:

/valine-sent-mail/img/set-variables.jpg
设置变量

大概是这样?

免费版的 LeanCloud 容器, 是有强制性休眠策略的, 不能 24 小时运行:

  • 每天必须休眠 6 个小时
  • 30 分钟内没有外部请求, 则休眠.
  • 休眠后如果有新的外部请求实例则马上启动 (但激活时此次发送邮件会失败) .

分析了一下上方的策略, 如果不想付费的话, 最佳使用方案就设置定时器, 每天 7 - 23 点每 20 分钟访问一次, 这样可以保持每天的绝大多数时间邮件服务是正常的.

但是, LeanCloud 本身有一个计划任务, 用这玩意搞搞就可以做到如上所示: 白天工作, 晚上休眠 6h.

步骤如下:

/valine-sent-mail/img/set-web-domain.jpg
设置Web主机域名

如果你喜欢可以用 CNAME 解析到自己的域名上, 反正我是解析了一下

然后创建一个用户可以用来登录后台进行管理

/valine-sent-mail/img/create-user.jpg
创建用户

注意 email 必填, 为 STMP_USER 设置的值, 否则无法登录后台. 官网说登录的时候用户名写这个, 而不是上面设置的用户名, 为了方便我写的都一样, 就没这破事了(还嫌事不够多是叭)

和上面设置全局变量类似, 添加一个 ADMIN_URL, 为之前设置的域名.

然后就可以访问这个域名登录管理系统了.

/valine-sent-mail/img/create-scheduled-task.jpg
创建计划任务

名称随意, 任务选自唤醒(self-wake), Cron 表达式我这里写的是 0 */20 0-17 * * ?, 即 0:00-17:59, 每 20min 进行一次任务. (服务器是UTC+0的)


没了

以后要是搞邮件模板什么的再来写叭, 先到这里, 反正是成功了! 有人评论会发邮件提醒我, 有人被回复还会同时发邮件提醒他(如果设置了邮箱的话).