评论系统Valine实现邮件提醒

对于我这个用静态博客的人来说,最难受的就是两件事儿,一是内容加密,一个就是评论系统了。前者还好说,大不了隐私的内容就不发了,后者还是让我费了一翻力气。几经对比最后选择了Valine评论系统,之所以选择它主要的就是看在外观比较简洁、加载速度快和并且支持MD。但是它也有一些问题,因为是无后端评论系统,所以不能进行后端信息验证,导致刷了无数匿名和无联系方式的内容。此外,其自带邮件提醒配置方法依托LeanCloud重置密码邮件模板功能,每天发送次数受限、不能定位具体页面等多方面问题。

对于博客系统评论无提醒是不可接受的,于是四处搜索解决办法,找到了一个开源项目,D大神的Valine-Admin,结果还发生了一些小误会,把原作者弄错了,实在抱歉,博主很厉害,把常用功能方面几乎都实现了。我也按照文档配置了一下,可能是我比较笨试了几遍也没成功,主要是我之前用的是腾讯企业邮,实在搞不懂他的用户账号和管理员账号之间的关系,晦涩难懂。于是乎我注销了腾讯企业邮箱,开通网易免费企业邮箱,感觉还不错。

由于之前配置多次也没成功的烦躁所以也没再试,于是生出了自己写的一个的想法,一来这样可以知道每一步的实现,控制问题来源也更爽一些,且自由度更高一些,二来也是一个不错的学习机会。本来想用JAVA开发的由于LeanCloud免费版配置过低,运行JAVA可能会卡顿,甚至挂掉,于是改用Python实现。

本项目基本思路参考上面博主,所以一些配置信息基本相同,配置步骤如下:

配置Valine评论系统

按照Valine文档配置评论系统,注意不要配置邮件提醒,如果按照其文档方式配置邮件提醒,将会收到两次邮件。

配置云引擎

登陆LeanCloud官网
依次点击左侧导航云引擎–>设置 设置代码库、环境变量(具体变量如下)和web主机域名

  • https://github.com/WindusL/LeanCloud-ACE.git填入,点击保存。

配置代码库

  • 配置环境变量和主机域名
1
2
3
4
5
6
7
SITE_NAME  站点名称作为邮箱发送人名称 如:风尘
SITE_URL 站点域名 如:https://blog.fcwalkers.com
SMTP_USER 邮箱用户名
SMTP_PASS 邮箱密码
SMTP_HOST 邮箱的SMTP服务地址 如:网易smtp.ym.163.com
SMTP_PORT 邮箱的SMTP服务端口 如:网易25
SENDER_NAME 发送邮件的主题 如:风尘博客-评论提醒

配置信息

  • 部署云引擎项目

部署云引擎

休眠策略

由于LeanCloud免费实例有强制休眠策略,休眠时评论实例会被启动,但是此次不会再发送邮件,下次请求才会发送。

针对此问题,Valine-Admin采用的是Linux服务器cron定时访问策略激活服务器,但是如果没有Linux服务器比较麻烦。经过我自己的研究和实践后,发现一种解决思路,就是在评论代码加载页面加入一段ajax代码来访问实例,达到激活的目的,此种方法可以达到效果是用户可能发生评论动作前激活,页面半小时无人访问后休眠,大部分时间可以保证正常使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new Valine({
el: '#vcomments' ,
appId: '',
appKey: '',
notify:false,
verify:true,
avatar:'mm',
placeholder: '做一个有头有脸的发言人!'
});


// 激活leancloud
$(function(){
$.get('http://fcwalkers.leanapp.cn') #fcwalkers.leanapp.cn为上面配置的web主机域名
});

此方法需要项目中引入JQuery,也可以使用隐藏的iframe标签达到相同目的(可能影响页面加载速度)。目前还在测试中,暂时没发现问题,可以根据自己的喜好选择自己喜欢的方式。

功能实现

目前此项目仅实现了表单验证和邮件通知的简单功能,后续可能会按需要增加如下功能:

后端表单信息验证
基于SMTP配置评论邮件通知
基于Akismet垃圾评论过滤
自定义邮件主题
评论管理页面