
![B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]](https://www.tudoucode.cn/wp-content/uploads/2026/03/2026032400352938.webp)
说实话,我一开始折腾 B2主题私信邮件通知 这件事,纯属被逼的。
站里私信是有了。
但问题是——管理员根本看不到啊!
你说我每天打开后台看私信?
不现实,真的不现实。
有时候一忙就是两三天,一看后台——好家伙,十几条私信,全是“在吗?”“站长?”“人呢???”
我:人还活着,就是没看到。
为什么我要搞这个功能
B2本身的私信系统其实不算差:
- 有对话列表
- 有未读统计
- 有 mark 分组
- 数据库结构也挺清晰
但有一个致命问题:
👉 没有即时提醒机制
尤其是管理员(ID=1),简直就是“盲盒收信”。
后来我翻源码,才发现一个关键点:
do_action('b2_send_dmsg_action',$msg_data);
我当时直接愣住了。
???这不就是留好的后门吗?
核心实现思路(简单到离谱)
整个逻辑其实一句话:
👉 监听私信发送 → 判断是否发给管理员 → 发邮件
没了,就这。
但重点是——你得知道往哪插。
我实际动手的过程(有点曲折)
一开始我还犯了个很蠢的错误:
我试图去改 send_directmessage() 里面的代码。
改了两分钟就放弃了。
原因很简单:
- 主题更新就覆盖
- 改核心文件容易炸
- 后面根本不好维护
于是我冷静下来重新看代码。
然后就看到那个 do_action。
那一刻真的有点爽。
👉 这就是WordPress的精髓:钩子拯救世界
真正实现代码(精简版)(放 functions.php 或插件里)
我最后写的是这种结构:
add_action('b2_send_dmsg_action', function($msg){
if((int)$msg['to'] !== 1){
return;
}
$content = wp_strip_all_tags($msg['content']);
$subject = "【私信提醒】你有一条新消息";
$body = "
发送人ID:{$msg['from']}
时间:{$msg['date']}
内容:
{$content}
";
wp_mail('你的qq邮箱@qq.com', $subject, $body);
},10,1);
写完我第一反应是:
👉 就这????
那么如果是管理员专用(或指定用户发送呢),这里给大家打个样!!
add_action(‘b2_send_dmsg_action’, function($msg){
// 只处理发给管理员(ID=1)
if((int)$msg[‘to’] !== 1){
return;
}// 获取发送人信息
$from_user = get_userdata($msg[‘from’]);
$from_name = $from_user ? $from_user->display_name : ‘未知用户’;// 邮件内容
$subject = ‘【网站私信通知】你收到了新的私信’;$content = ”
你收到了一条新的私信:发送人:{$from_name}(ID: {$msg[‘from’]})
时间:{$msg[‘date’]}内容:
{$msg[‘content’]}请登录网站后台查看:
” . home_url();// 管理员邮箱(建议填QQ邮箱)
$to = ‘你的QQ邮箱@qq.com’;// 发送邮件
wp_mail($to, $subject, $content);},10,1);
结果测试的时候我又崩了
发私信。
刷新邮箱。
没反应。
我当时第一反应:
“完了,是不是B2哪里限制了?”
结果查了一圈才发现:
👉 不是代码问题,是邮件压根没发出去
最大坑点:SMTP
WordPress默认的 wp_mail():
- 不稳定
- 容易进垃圾箱
- 有时候直接失败
尤其你用的是QQ邮箱。
必须干这件事:
开启QQ邮箱SMTP
- 设置 → 账户
- 开启 SMTP
- 拿到 授权码(不是密码)
然后装插件(强烈建议)
我用的是:
👉 WP Mail SMTP
配置完之后再试。
那一刻真的来了
我重新发了一条私信。
手机“叮”一下。
QQ邮箱推送:
👉 “你有一条新私信”
我当场一句:
卧槽终于好了!!
但问题又来了(真实使用后)
刚开始觉得很爽。
但用了一天之后我开始后悔。
因为:
👉 有人连续发私信
结果我邮箱:
- 10秒一封
- 30秒三封
- 一分钟直接爆炸
我直接关闭邮件提醒那一刻:
内心:我这是在折磨自己吗???
后来我加了一个“冷静机制”
简单说就是:
👉 限制发送频率
if(get_transient('dmsg_notice')){
return;
}
set_transient('dmsg_notice',1,60);
效果:
- 60秒内只发一封
- 不会被刷爆
瞬间舒服了。
一些真实体验总结(踩坑后)
优点:
- 真·实时提醒
- 不用盯后台
- 管理效率提升一大截
缺点(也挺真实):
- 容易被刷邮件
- 内容太长邮件不好看
- QQ邮箱有时候进垃圾箱
我现在的最终方案
现在我用的是:
- 邮件通知(基础)
-
- 后面准备接 企业微信 webhook
因为说实话:
👉 邮件还是有点“慢”和“土”
但作为第一步:
👉 已经完全够用了
总结一句人话版本
如果你也在用B2,而且有私信需求:
👉 一定要搞这个功能
否则就是:
- 用户找你
- 你看不到
- 用户以为你跑路了
最后一句真心话:
👉 B2这个钩子设计真的很良心
虽然文档不说,但代码里全给你留好了。
你只要稍微懂一点:
👉 就能把它改成你想要的样子
![B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]](https://www.tudoucode.cn/wp-content/uploads/2026/03/2026032400373793.webp)
![B2主题发送私信获取邮件通知提醒[一串代码轻松解决!]](https://www.tudoucode.cn/wp-content/uploads/2026/03/2026032400352677.webp)

