Solo 邮件推送评论提醒

本贴最后更新于 1887 天前,其中的信息可能已经东海扬尘

目前的 Solo 版本中已经彻底移除邮件相关功能,以下内容请忽略。


本文是《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 从设计到实现》

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1424 引用 • 10041 回帖 • 469 关注
  • 设计
    111 引用 • 796 回帖 • 1 关注
  • 文档
    56 引用 • 1288 回帖 • 2 关注
0 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • samye

    报错了

      nested exception is:
    	com.sun.mail.smtp.SMTPSenderFailedException: 501 mail from address must be same as authorization user
    
    	at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2358)
    	at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1823)
    	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1300)
    	at javax.mail.Transport.send0(Transport.java:189)
    	at javax.mail.Transport.send(Transport.java:118)
    	at org.b3log.solo.mail.local.MailSender.sendMail(MailSender.java:158)
    	at org.b3log.solo.mail.local.LocalMailService.lambda$send$0(LocalMailService.java:37)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: com.sun.mail.smtp.SMTPSenderFailedException: 501 mail from address must be same as authorization user
    
    	at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1832)
    	... 6 more 
    
    2 回复
  • 88250

    应该是配置有问题引起的。

  • Jaquen

    朋友,解决了吗?