大多数情况下,我们习惯使用 WordPress 自带的评论系统,尽管它不是那么地尽人意——毕竟,第三方的评论系统实在是让人难以接受。
第三方比较优秀的多说实在是太恶心了;而国外的几个不错的评论系统又很不方便中国使用,总的来说,还是 WordPress 自带的评论系统最好用了。
那么,说起 WordPress 自带的这个评论系统,可能邮件通知是它最大的特色了。虽然对外来说 WordPress 不会公开评论者的邮件地址,但是你绝不会想到会有人利用评论通知去扩散垃圾邮件吧!
后台 – 设置 – 讨论,勾选”评论必须经人工批准”,这样所有评论必须经过管理员审核才能显示。
我只需要在任意的 WordPress 网站回复评论就可以啦!所以,我们有必要制止这种行为,最简单的方法就是开启评论审核之后才能通过而不是直接就通过。另外,我们还需要定制一下 WordPress 自带的邮件通知函数,让它更加智能——比如其他人评论别人的评论的时候,只有审核通过了才会发出邮件通知。
同样的,我还是推荐你在子主题里进行修改,这样你的主题就可以随意升级而避免自定义的内容被清除掉了:)
在你当前主题的 functions.php 里追加如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
/** * WordPress评论回复邮件提醒防垃圾评论版 * 作者:露兜 * 博客:http://www.ludou.org/ * * 2014年7月5日 : * 首个版本 */ function ludou_comment_mail_notify($comment_id, $comment_status) { // 评论必须经过审核才会发送通知邮件 if ($comment_status !== 'approve' && $comment_status !== 1) return; $comment = get_comment($comment_id); if ($comment->comment_parent != '0') { $parent_comment = get_comment($comment->comment_parent); // 邮件接收者email $to = trim($parent_comment->comment_author_email); // 邮件标题 $subject = '您在[' . get_option("blogname") . ']的留言有了新的回复'; // 邮件内容,自行修改,支持HTML $message = ' <p>Hi, ' . $parent_comment->comment_author . '</p> <p>您之前在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br />' . $parent_comment->comment_content . '</p> <p>' . $comment->comment_author . ' 给您回复:<br />' . $comment->comment_content . '<br /><br /></p> <p>您可以 <a href="' . htmlspecialchars(get_comment_link($comment->comment_parent)) . '">点此查看回复完整內容</a></p> <p>欢迎再度光临 <a href="'.home_url().'">' . get_option('blogname') . '</a></p> <p>(此邮件由系统自动发送,请勿回复)</p>'; $message_headers = "Content-Type: text/html; charset=\"".get_option('blog_charset')."\"\n"; // 不用给不填email的评论者和管理员发提醒邮件 if($to != '' && $to != get_bloginfo('admin_email')) @wp_mail($to, $subject, $message, $message_headers); } } // 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核 add_action('comment_post', 'ludou_comment_mail_notify', 20, 2); // 普通访客发表的评论,等博主审核后再发送提醒邮件 add_action('wp_set_comment_status', 'ludou_comment_mail_notify', 20, 2); |
优化
好吧,既然我们已经改了默认的邮件通知函数,那为何不顺便改的更彻底一些,让它看起来更加赏心悦目一点呢?总之,我在网上随便找到了一段美化代码,当然,这个代码比较旧无法正常运行,我参照着露兜博客的代码进行了微小的修改,你可以拿去试试看:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
/** * 修复 WordPress 邮件评论回复通知被恶意利用的问题 logcg.com 落格博客 */ function logcg_comment_mail_notify($comment_id, $comment_status) { // 评论必须经过审核才会发送通知邮件 if ($comment_status !== 'approve' && $comment_status !== 1) return; $comment = get_comment($comment_id); if ($comment->comment_parent != '0') { $parent_comment = get_comment($comment->comment_parent); // 邮件接收者email $to = trim($parent_comment->comment_author_email); // 邮件标题 $subject = '您在[' . get_option("blogname") . ']的留言有了新的回复'; // 邮件内容,自行修改,支持HTML $message = ' <div style="background-color:#fff; border:1px solid #666666; color:#111; -moz-border-radius:8px; -webkit-border-radius:8px; -khtml-border-radius:8px; border-radius:8px; font-size:12px; width:702px; margin:0 auto; margin-top:10px; font-family:苹方,微软雅黑, Arial;"> <div style="background:#666666; width:100%; height:60px; color:white; -moz-border-radius:6px 6px 0 0; -webkit-border-radius:6px 6px 0 0; -khtml-border-radius:6px 6px 0 0; border-radius:6px 6px 0 0; "> <span style="height:60px; line-height:60px; margin-left:30px; font-size:12px;"> 您在 <a style="text-decoration:none; color:#00bbff;font-weight:600;" href="' . get_option('home') . '">' . get_option('blogname') . ' </a> 的留言有了新回复!</span></div> <div style="width:90%; margin:0 auto"> <p>' . $parent_comment->comment_author . ',您好!</p> <p>您曾在 [' . get_option("blogname") . '] 的文章 《' . get_the_title($comment->comment_post_ID) . '》 上发表评论: <p style="background-color: #EEE;border: 1px solid #DDD; padding: 20px;margin: 15px 0;">' . nl2br($parent_comment->comment_content) . '</p> <p>' . trim($comment->comment_author) . ' 给您的回复如下: <p style="background-color: #EEE;border: 1px solid #DDD;padding: 20px; margin: 15px 0;">' . nl2br($comment->comment_content) . '</p> <p>您也可移步 <a style="text-decoration:none; color:#00bbff" href="' . htmlspecialchars(get_comment_link($comment->comment_parent)) . '">落格博客</a> 以查看回复的完整內容。</p> <p>欢迎再次光临 <a style="text-decoration:none; color:#00bbff" href="' . get_option('home') . '">' . get_option('blogname') . '</a></p> <p>(此邮件由系统自动发出, 请勿回复。)</p> </div> </div>'; $message_headers = "Content-Type: text/html; charset=\"".get_option('blog_charset')."\"\n"; // 不用给不填email的评论者和管理员发提醒邮件 if($to != '' && $to != get_bloginfo('admin_email')) @wp_mail($to, $subject, $message, $message_headers); } } // 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核 add_action('comment_post', 'logcg_comment_mail_notify', 20, 2); // 普通访客发表的评论,等博主审核后再发送提醒邮件 add_action('wp_set_comment_status', 'logcg_comment_mail_notify', 20, 2); |
效果
最后,我们来看看效果:
本文由 落格博客 原创撰写:落格博客 » WordPress 评论回复邮件通知 优化
转载请保留出处和原文链接:https://www.logcg.com/archives/1638.html
不错,用着了
大神,简约大气的博客主题。。使用插件wp SMTP 部署邮件发送,一般的主题还是都优化了邮件发送界面的
支持mail()函数情况下还是收不到邮件
尝试用第三方的邮件服务,smtp,如果你的服务器不支持发邮件,你就无论如何都发不出去,需要给服务商发工单寻求进一步支持。
开启邮件通知后,感觉发评论有点慢。
QQ企业邮箱,发不出信呀。
STMP插件单独测试的时候是可以发送成功的。
开启加密ssl?
666
用上了,感谢!
我给改了下主题….暗色调不喜欢n
/**
* 修复 WordPress 邮件评论回复通知被恶意利用的问题 logcg.com 落格博客
* 二次修改 mikifuns blog.mikifuns.com
*/
function logcg_comment_mail_notify($comment_id, $comment_status) {
// 评论必须经过审核才会发送通知邮件
if ($comment_status !== ‘approve’ && $comment_status !== 1)
return;
$comment = get_comment($comment_id);
if ($comment->comment_parent != ‘0’) {
$parent_comment = get_comment($comment->comment_parent);
// 邮件接收者email
$to = trim($parent_comment->comment_author_email);
// 邮件标题
$subject = ‘您在[‘ . get_option(“blogname”) . ‘]的留言有了新的回复’;
// 邮件内容,自行修改,支持HTML
$message = ‘
您在 ‘ . get_option(‘blogname’) . ‘ 的留言有了新回复!
‘ . $parent_comment->comment_author . ‘,您好!
您曾在 [‘ . get_option(“blogname”) . ‘] 的文章
《’ . get_the_title($comment->comment_post_ID) . ‘》 上发表评论:
‘ . nl2br($parent_comment->comment_content) . ‘
‘ . trim($comment->comment_author) . ‘ 给您的回复如下:
‘ . nl2br($comment->comment_content) . ‘
comment_parent)) . ‘” target=”_self” style=”text-decoration: none;”> 点击查看
欢迎再次光临 ‘ . get_option(‘blogname’) . ‘
(此邮件由系统自动发出, 请勿直接回复。)
miki.acg
‘;
$message_headers = “Content-Type: text/html; charset=\””.get_option(‘blog_charset’).”\”\n”;
// 不用给不填email的评论者和管理员发提醒邮件
if($to != ” && $to != get_bloginfo(‘admin_email’))
@wp_mail($to, $subject, $message, $message_headers);
}
}
// 编辑和管理员的回复直接发送提醒邮件,因为编辑和管理员的评论不需要审核
add_action(‘comment_post’, ‘logcg_comment_mail_notify’, 20, 2);
// 普通访客发表的评论,等博主审核后再发送提醒邮件
add_action(‘wp_set_comment_status’, ‘logcg_comment_mail_notify’, 20, 2);
我用腾讯企业邮箱和GMail的SMTP发送邮件都是登陆失败的log,自带主机商的邮件系统直接被腾讯放垃圾箱,gmail直接退信了。。。。
你需要开启ssl加密,端口也要改成加密的465好像,我没记嘿嘿,如果是gmail的话记得使用一次性密码,或者不开启两步验证。还有就是发件邮箱不能乱填,必须和你的账号一致才行。
等下去玩玩,你的倒是工作正常了,昨天我自己玩了好久都是登录失败
对了,你用的什么邮箱呢
我这个代发邮件的邮箱是QQ邮箱的域名邮箱,我自己有gmail,现在统统转发hotmail了——因为这个目前还没有被墙:)
哈哈,第三方邮箱这个我有调试经验的,因为曾在另外一个网站捣鼓了好久的。
我也通过腾讯企业邮试过同样的错误,2016-03-29 13:58:05 SERVER -> CLIENT: 221 Bye
2016-03-29 13:58:05 Connection: closed
2016-03-29 13:58:05 SMTP Error: Could not authenticate.
From Email
验证处要手动点选ssl验证方式,默认不是。
换了个插件终于GMAIL能收啊啊啊啊啊,谢了,明天加上自动回复
给个赞,这界面很好看,等会我也拿回去用?