找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 23|回复: 0

[维护日志] [2026-06-08] [功能] [点评邮件通知] - 点评邮件通知实现及邮件队列发送间隔优化为1分钟

[复制链接]
  • 打卡等级:本地老炮

9337

威望

7439

金钱

1万

贡献

管理员

自由的灵魂

积分
107425
主题
5630
回帖
26661
注册时间
2003-4-10
最后登录
2026-10-1
发表于 2026-6-8 23:19:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1、问题缘起

论坛已有主题回复邮件通知、回帖管理邮件通知、评分邮件通知功能,但缺少「点评」功能的邮件通知。用户发布点评后,被点评方只能收到站内通知,无法通过邮件及时知晓,导致互动响应延迟。

讨论过程中发现的相关问题:

问题解决方案
点评邮件链接只带 tid,无法定位到具体回帖改为 redirect 链接,同时携带 tid 和 pid
邮件队列固定 5 分钟发送一次,体验差改为每分钟执行 + 随机休眠 0-59 秒,间隔 60-119 秒
邮件内容中出现语法错误导致无法提交修正字符串拼接中的单引号位置错误





2、解决方案

(1)简要技术分析:
在点评处理逻辑的站内通知代码后,增加邮件入队代码,利用现有 common_mail_queue 异步发送,不阻塞点评提交。

(2)修改、新增文件列表:

操作文件路径说明
修改/source/include/post/post_newreply.php添加点评邮件通知代码
修改/api/mail_queue_cli.php添加随机休眠,优化发送间隔
修改Crontab将邮件队列执行间隔从 5 分钟改为 1 分钟


(3)关键代码段:

点评邮件通知代码(插入位置:notification_add 之后):

  1. // ========= 点评邮件通知 =========
  2. $author_info = C::t('common_member')->fetch($post['authorid']);
  3. if ($author_info && !empty($author_info['email'])) {
  4.     $mail_subject = '您在 『' . $_G['forum']['name'] . '』 的帖子被点评';
  5.     $mail_message = "<html><body>";
  6.     $mail_message .= "<p>尊敬的 " . $author_info['username'] . ",您好:</p>";
  7.     $mail_message .= "<p>您在 『" . $_G['forum']['name'] . "』 发布的帖子被 <strong>" . $_G['username'] . "</strong> 点评:</p>";
  8.     $mail_message .= "<div style='background:#f5f5f5;padding:10px;margin:10px 0;border-left:3px solid #d9534f;'>" . nl2br(htmlspecialchars($comment)) . "</div>";
  9.     $mail_message .= "<p>查看详情:<a href="" . $_G['siteurl'] . "forum.php?mod=redirect&goto=findpost&ptid=" . $_G['tid'] . "&pid=" . $_GET['pid'] . "">" . $_G['siteurl'] . "forum.php?mod=redirect&goto=findpost&ptid=" . $_G['tid'] . "&pid=" . $_GET['pid'] . "</a></p>";
  10.     $mail_message .= "<p>期待您继续参与社区讨论。</p>";
  11.     $mail_message .= "</body></html>";
  12.    
  13.     C::t('common_mail_queue')->insert(array(
  14.         'uid' => $author_info['uid'],
  15.         'toemail' => $author_info['email'],
  16.         'username' => $author_info['username'],
  17.         'subject' => $mail_subject,
  18.         'message' => $mail_message,
  19.         'dateline' => TIMESTAMP,
  20.         'status' => 0,
  21.     ));
  22. }
  23. // ========= 点评邮件通知结束 =========
复制代码


邮件队列随机休眠(mail_queue_cli.php 开头):

  1. // 随机休眠 0-59 秒,避免多服务器同时执行
  2. sleep(rand(0, 59));
复制代码


Crontab 配置:

  1. * * * * * /usr/bin/php /api/mail_queue_cli.php >> /www/wwwlogs/mail_queue.log 2>&1
复制代码





3、最终实现效果

对比项优化前优化后
点评邮件❌ 无✅ 异步发送
邮件中链接—直接定位到被点评楼层
邮件发送间隔5 分钟60-119 秒(随机)
对被点评方仅站内通知站内通知 + 邮件通知





4、重要技术沉淀

需更新到固化摘要:

  1. 十九、点评邮件通知(2026-06-08)

  2. 功能:帖子被点评时,通过邮件队列异步通知被点评方
  3. 涉及文件:source/include/post/post_newreply.php
  4. 链接格式:forum.php?mod=redirect&goto=findpost&ptid={tid}&pid={pid}
  5. 邮件队列间隔:Crontab 每分钟执行,脚本内随机休眠 0-59 秒
复制代码


踩坑点:
  • 邮件链接必须同时携带 tid 和 pid,否则无法定位到具体回帖楼层
  • 字符串拼接时注意单引号与双引号的嵌套,避免 PHP 语法错误
  • 邮件队列执行过于频繁会占用服务器资源,随机休眠可打散请求




5、进一步优化可能性

  • 将邮件模板内容存入数据库,支持后台在线编辑
  • 为点评邮件增加「批量合并」功能,同一用户多条点评合并为一封邮件
  • 支持版块级别的开关控制(某些版块关闭点评邮件通知)

不懂就搜!点此搜点拨论坛。如果本坛没有,请尝试点此问AI,或跟帖提问。
发帖前注意看置顶帖。
不定期借助AI对点拨论坛陈年老帖进行挖坟回复,打扰勿怪!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|点拨论坛 |网站地图

GMT+8, 2026-10-2 00:40 , Processed in 0.043393 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表