本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

邮件推送评论提醒

邮件推送评论提醒需要配置 mail.props 后才能使用,原理是通过本地 JavaMail 连接邮件服务商 SMTP 进行推送,所以理论上只要你的邮箱支持 SMTP 客户端发送邮件,那么就可以通过配置来使用邮件推送。

推送场景

  1. 有访客对文章 / 页面进行评论,这时博客管理员会收到评论提醒邮件
  2. 有访客对文章 / 页面上已有评论的进行回复,则已有原评论者会收到回复提醒邮件
  3. 重置密码

推送前会做一些判断:

  1. 目标邮件地址格式校验
  2. 自己评论自己的文章 / 页面不会推送
  3. 评论人和回复人是同一个人(邮件地址相同)不会推送

回复提醒模板

回复提醒邮件很多情况下是发送给访客的,比如访客 A 评论后访客 B 回复了 A 的评论,则 A 就会收到回复提醒邮件。所以这个时候回复提醒邮件的样式风格就显得比较重要了,毕竟是发给其他访客的。

可以在 Solo 的后台 - 工具 - 其他 - 回复提醒邮件模板中对该模板进行自定义,配置界面上列举出了可用的变量,可通过变量进行邮件模板定义,这样能让发送的邮件更符合你博客的样式风格。

mail.props 配置

mail.user=
mail.password=
mail.debug=false
mail.smtp.host=smtp.qq.com
mail.smtp.port=465
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback=false
mail.smtp.socketFactory.port=465
mail.smtp.auth=true
mail.smtp.starttls.enable=true

只有同时配置了(不留空)mail.usermail.passwordmail.smtp.hostmail.smtp.port 这几项,才认为启用了邮件推送,具体判断代码可参考方法 Solos#isMailConfigured

推送实现

  1. 对于推送文章、页面评论提醒给管理员,是在 CommentMgmtService#addArticleCommentCommentMgmtService#addPageComment 中进行的
  2. 对于推送评论回复提醒邮件是通过事件机制实现的,具体可参考 ArticleCommentReplyNotifierPageCommentReplyNotifier 这两个类

在类设计方面,我们提供了一个接口 MailService,目前只有一个实现类 LocalMailService,最终通过 MailSender 将消息转 JavaMail 消息格式进行推送。

imagepng

在实际进行推送时,会对每次推送开一个线程,避免阻塞当前评论请求:

public final class LocalMailService implements MailService {

    @Override
    public void send(final Message message) {
        new Thread(() -> new MailSender().sendMail(message)).start();
    }
}

回到全文目录:《Solo 从设计到实现》

感谢    关注    收藏    赞同    反对    举报    分享