活力39282
在线时间13640 小时
阅读权限200
管理员
自由的灵魂
- 积分
- 107434
- 主题
- 5630
- 回帖
- 26661
- 注册时间
- 2003-4-10
- 最后登录
- 2026-10-2
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、问题缘起
论坛举报功能已正常运作,举报数据会写入 common_report 表,并通过站内通知提醒管理员。但创始人(UID 7)无法及时感知新的举报,需要登录后台查看举报列表才能发现,导致举报处理滞后。用户期望当有人提交举报时,创始人能立即收到邮件通知,以便快速响应处理。
讨论过程中发现的相关问题:
| 问题 | 解决方案 | | 举报内容包含用户名前缀(如 IsaacZ : 测试举报) | 从 $_POST['message'] 获取原始内容,去除用户名和分隔符 | | 举报处理入口不明确 | 邮件中附上后台举报管理链接 | | 需指定特定创始人接收 | 硬编码 UID 7,从 common_member 表获取邮箱 |
2、解决方案
(1)简要技术分析:
在举报提交处理逻辑中,当数据成功写入 common_report 表后,通过 C::t('common_member')->fetch(7) 获取创始人信息,调用 sendmail 发送即时邮件通知。
(2)修改文件列表:
| 操作 | 文件路径 | | 修改 | /source/module/misc/misc_report.php |
(3)关键代码段:
插入位置:在站内通知循环结束后、showmessage('report_succeed') 之前(约第 67-71 行之间)
- // ========= 举报邮件通知创始人 =========
- $founder_uid = 7;
- $founder = C::t('common_member')->fetch($founder_uid);
- if ($founder && !empty($founder['email'])) {
- // 举报内容:优先从 POST 获取原始输入,去除可能的用户名前缀
- $raw_content = isset($_POST['message']) ? $_POST['message'] : $message;
- $report_content = preg_replace('/^[^:]+:\s*/', '', trim($raw_content));
- $report_content = htmlspecialchars($report_content);
-
- $report_url = $_G['siteurl'] . 'admin.php?action=report';
- $mail_subject = '【举报通知】有新的举报需要处理';
- $mail_message = "<html><body>";
- $mail_message .= "<p>您好,创始人:</p>";
- $mail_message .= "<p>论坛有一条新的举报,请及时处理。</p>";
- $mail_message .= "<hr>";
- $mail_message .= "<p><strong>举报人:</strong>" . $_G['username'] . " (UID: " . $_G['uid'] . ")</p>";
- $mail_message .= "<p><strong>举报内容:</strong>" . $report_content . "</p>";
- $mail_message .= "<p><strong>举报时间:</strong>" . date('Y-m-d H:i:s') . "</p>";
- $mail_message .= "<p><strong>操作指引:</strong><br>";
- $mail_message .= "请登录后台处理举报:<a href="" . $report_url . "">" . $report_url . "</a></p>";
- $mail_message .= "<p style="color:#999;">(此邮件由系统自动发送,请勿回复)</p>";
- $mail_message .= "</body></html>";
-
- loaducenter();
- include_once libfile('function/mail');
- @sendmail($founder['email'], $mail_subject, $mail_message);
- }
- // ========= 举报邮件通知结束 =========
复制代码
3、最终实现效果
| 场景 | 优化前 | 优化后 | | 用户提交举报 | 仅站内通知 | ✅ 创始人邮箱即时收到邮件 | | 举报内容 | 含用户名前缀 | ✅ 仅显示纯举报内容 | | 处理入口 | 需登录后台手动查找 | ✅ 邮件中直接附上后台链接 | | 通知时效 | 可能有延迟 | 即时发送 |
4、重要技术沉淀
需更新到固化摘要:
- 二十一、举报邮件通知(2026-06-24)
- 功能:用户提交举报时,即时发送邮件通知创始人(UID 7)
- 涉及文件:source/module/misc/misc_report.php
- 触发位置:举报数据写入成功后、showmessage 之前
- 管理员邮箱:从 common_member 表读取 UID 7 的 email 字段
- 后台链接:/admin.php?action=report
- 发送方式:即时发送
复制代码
踩坑点:
| 踩坑 | 正确做法 | | 误以为举报处理文件是 forum_report.php | 实际在 misc_report.php 中(misc.php?mod=report 入口) | | 举报内容 $message 包含用户名前缀 | 从 $_POST['message'] 获取原始内容,用正则去除前缀 | | 通知发送给所有管理员 | 仅发送给指定创始人(UID 7),避免打扰无关人员 |
5、进一步优化可能性
- 支持多个创始人:将 $founder_uid 改为数组,循环发送给多个创始人
- 举报详情增强:在邮件中附上被举报帖子的标题和链接(需要额外查询 common_report 表)
- 后台管理提醒:在创始人登录后台时增加弹窗提醒(已有站内通知,非必需)
|
|