diff --git a/lib/bootstrap.php b/lib/bootstrap.php index a3603f4..cff0f6a 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -8,7 +8,7 @@ if (!defined('FB_ROOT')) { define('FB_ROOT', dirname(__DIR__)); // 静态资源版本号:改 assets/ 下的 css/js 后把这个数字 +1, // 让浏览器与 CDN 缓存失效。全站只此一处,别再往页面里写死数字。 - if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 31); } + if (!defined('FB_ASSET_V')) { define('FB_ASSET_V', 32); } } /* ------------------------------------------------------------------ diff --git a/lib/mailer.php b/lib/mailer.php index b2867fa..3cf693f 100644 --- a/lib/mailer.php +++ b/lib/mailer.php @@ -737,12 +737,27 @@ if (!function_exists('fb_notify_event')) { return [false, $why]; } - // ---- 3. 自己通知自己就别发了 ---- - if (!$isAdminNotice && !empty($extra['is_admin']) === false - && !empty($extra['reply']['author_email'])) { - if (strcasecmp(trim((string)$extra['reply']['author_email']), $to) === 0) { - $log($to, 0, '自己回复自己,不发'); - return [false, '自己回复自己,不发']; + /* ---- 3. 自己通知自己就别发了 ---- + * + * 用户 2026-11-03:「他自己回复他自己的反馈,不要再给他发邮件了 —— + * 他自己说的,他发给他自己,不是很奇怪吗?但如果是别人回复他的, + * 就可以给他发邮件。」 + * + * 覆盖三种「其实是同一个人」的情形: + * ① 提交人自己回复(带 token 进来,服务端会把邮箱强制设为原作者); + * ② 回复者填的邮箱与提交人相同(普通访客碰巧同邮箱); + * ③ 邮箱大小写 / 前后空格不同(DAO@x.com vs dao@x.com)。 + * + * ⚠️ 旧写法是 `!empty($extra['is_admin']) === false` —— 双重否定绕, + * 读起来要停一下才知道在判什么。这里改成直接判 is_admin。 + * ⚠️ 官方(管理员)回复不在豁免之列:管理员邮箱通常与提交人不同, + * 但万一相同(管理员给自己提的反馈回复),也不该给自己发信。 */ + if (!$isAdminNotice) { + $replyMail = isset($extra['reply']['author_email']) + ? trim((string)$extra['reply']['author_email']) : ''; + if ($replyMail !== '' && strcasecmp($replyMail, $to) === 0) { + $log($to, 0, '本人回复自己的反馈,不发信'); + return [false, '本人回复自己的反馈,不发信']; } }