lisa主机lisa主机

WordPress评论回复邮件通知对方功能

发布于:2014-11-19 更新于:2020-03-29 其它 24条评论

原本小z博客使用了多说评论,回复对方后会收到多说的提示,不过近期Gravatar头像被墙,多说服务器也太不稳定,部分头像回源而不能缓存,导致博客加载异常缓慢,还没有解决的请看这里

因此最近又换回了wordpress自带评论,回归简单化,速度感觉提升了不少,不过为了利于用户体验,当别人在我们博客留言我们回复对方的时候希望对方能够收到一条通知,那么就可以使用评论回复邮件通知的功能。

网上提供了很多种代码的方法,我也试过好几种,有的代码已经失效不再起作用,而有的代码则不太完整,最后由热心网友无主题提供了一段不错的功能代码,只需要将代码添加到主题目录的functions.php中即可。

// 评论回应邮件通知
function comment_mail_notify($comment_id) {
  $admin_email = get_bloginfo ('admin_email'); 
  $comment = get_comment($comment_id);
  $comment_author_email = trim($comment->comment_author_email);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  $to = $parent_id ? trim(get_comment($parent_id)->comment_author_email) : '';
  $spam_confirmed = $comment->comment_approved;
  if (($parent_id != '') && ($spam_confirmed != 'spam') && ($to != $admin_email)) {
    $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
    $subject = '您在 [' . get_option("blogname") . '] 的留言有了新回复';
    $message = '
        <div style="-moz-border-radius: 5px;-webkit-border-radius: 5px;-khtml-border-radius: 5px;border-radius: 5px;background-color:white;border-top:2px solid #12ADDB;box-shadow:0 1px 3px #AAAAAA;line-height:180%;padding:0 15px 12px;width:500px;margin:50px auto;color:#555555;font-family:Century Gothic,Trebuchet MS,Hiragino Sans GB,微软雅黑,Microsoft Yahei,Tahoma,Helvetica,Arial,SimSun,sans-serif;font-size:12px;">
        <h2 style="border-bottom:1px solid #DDD;font-size:14px;font-weight:normal;padding:13px 0 10px 8px;"><span style="color: #12ADDB;font-weight: bold;">&gt;</span>您在 <a style="text-decoration:none;color: #12ADDB;" href="' . get_option('home') . '" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" target="_blank" rel="noopener noreferrer">' . get_option('blogname') . '</a> 博客上的留言有回复啦!</h2><div style="padding:0 12px 0 12px;margin-top:18px"><p>亲爱的 ' . trim(get_comment($parent_id)->comment_author) . ', 您好!您曾在文章《' . get_the_title($comment->comment_post_ID) . '》上发表评论:</p>
        <p style="background-color: #f5f5f5;border: 0px solid #DDD;padding: 10px 15px;margin:18px 0">'. trim(get_comment($parent_id)->comment_content) . '</p><p>'. trim($comment->comment_author) .'给您的回复如下:</p><p style="background-color: #f5f5f5;border: 0px solid #DDD;padding: 10px 15px;margin:18px 0">' . trim($comment->comment_content) .'</p><p>您可以点击<a href="' . htmlspecialchars(get_comment_link($parent_id, array('type' => 'comment'))) . '" rel="external nofollow" target="_blank">查看回复的完整内容</a>,欢迎再次光临<a href="' . get_option('home') . '" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank">' . get_option('blogname') . '</a> 。</p>
        <p style="color: #000;background: #f5f5f5;font-size:11px;border: solid 1px #eee;padding: 2px 10px;">请注意:此邮件由 <a href="' . get_option('home') . '" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank">' . get_option('blogname') . '</a> 自动发送,请勿直接回复。<br />如果此邮件不是您请求的,请忽略并删除!</p></div></div>';
    $from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
    $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
    wp_mail( $to, $subject, $message, $headers );
  }
}
add_action('comment_post', 'comment_mail_notify');
// -- END ----------------------------------------

显示的效果请看下面的截图,如果你的主机禁用了mail()函数,建议使用WP SMTP插件或使用SMTP代码来解决。

huifu

邮件回复通知

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


已有 24 条评论

  1. 握兰网

    为什么我的评论提交速度很慢,不知道是不是因为邮件通知的缘故

  2. Oeasy

    设置后网页打不开了

    1. 小z Oeasy

      代码位置加错了吧,修改前最好先备份。

      1. Oeasy 小z

        有做备份 代码没有加错 就是加了代码就打不开网页了 不知道怎么回事

    1. 小z 韩国K金时尚首饰

      给你一分

  3. Jianrry

    刚刚试了下,可以正常的接收邮件,但邮件内容部分为乱码。我用的是这段代码和你的SMTP代码。

  4. 腾博会

    你好,请问小编可以让我转载这篇文章内容吗?我会备注原文出处链接的以及作者

    1. 小z 腾博会

      在保留原文出处的情况下是允许转载的,感谢支持。

  5. Weidan

    这段代码我用于自己的 没有收到邮件 主机是恒创国内的 还有其他的解决方案吗 比如插件也可以

    1. 小z Weidan

      若没有收到邮件请检查SMTP设置是否正确,您可以尝试使用SMTP插件或者SMTP代码试试看,祝好运。

  6. 灵趣网

    不知道为什么我用这段代码就可以..
    这段代码没有美化 很丑,我是WIN系统 插件发的

    //评论邮件回复
    /* comment_mail_notify v1.0 by willin kan.*/
    function comment_mail_notify($comment_id) {
    $admin_email = get_bloginfo (‘admin_email’); // $admin_email 可改为你指定的 e-mail.
    $comment = get_comment($comment_id);
    $comment_author_email = trim($comment->comment_author_email);
    $parent_id = $comment->comment_parent ? $comment->comment_parent : ”;
    $to = $parent_id ? trim(get_comment($parent_id)->comment_author_email) : ”;
    $spam_confirmed = $comment->comment_approved;
    if (($parent_id != ”) && ($spam_confirmed != ‘spam’) && ($to != $admin_email) && ($comment_author_email == $admin_email)) {

    /* 上面的判断式,决定发送邮件的必要条件:
    ($parent_id != “) && ($spam_confirmed != ‘spam’): 回复的, 而且不是 spam 才可发, 必需!!
    ($to != $admin_email) : 不发給 admin.
    ($comment_author_email == $admin_email) : 只有 admin 的回复发邮件.
    可视个人需求修改以上条件.
    */
    //e-mail 发出点, no-reply 可改为可用的 e-mail.
    $wp_email = ‘no-reply@’ . preg_replace(‘#^www\.#’, ”, strtolower($_SERVER[‘SERVER_NAME’]));
    //邮件内容
    $subject = ‘您在 [‘ . get_option(“blogname”) . ‘] 的留言有了回应’;
    $message = trim(get_comment($parent_id)->comment_author) . ‘, 您好!
    您曾在《’ . get_the_title($comment->comment_post_ID) . ‘》的留言:’
    . trim(get_comment($parent_id)->comment_content) . ‘ ‘ . trim($comment->comment_author) . ‘ 给您的回应:’ . trim($comment->comment_content) . ‘ 您可以点击 ‘ . htmlspecialchars(get_comment_link($parent_id)) . ‘查看回应完整內容 欢迎再度光临’ . get_option(‘home’) . ” . get_option(‘blogname’) . ‘ (此邮件由系统自动发出, 请勿回复.) ‘;
    $from = “From: \”” . get_option(‘blogname’) . “\” “;
    $mail_headers = “$from\nContent-Type: text/html; charset=” . get_option(‘blog_charset’) . “\n”;
    wp_mail( $to, $subject, $message, $headers );
    }
    }
    //发表评论时的动作钩子
    add_action(‘comment_post’, ‘comment_mail_notify’);

  7. 小武

    你改完代码之后. 在收取通知邮件的时候,是否出现了:”由xxx代发”的字样

    1. 小z 小武

      没有啊,截图就是完整的邮件内容。你应该会收到我发送的邮件,你看一下有没有。

      1. 小武 小z

        没有,我换服务器之前是有的。这次换完服务器本来想解决一下这个问题。结果这两天的测试,发现没有这个问题了。 如果出现由xxx代发,对邮箱比较不友好,容易被当成垃圾处理。

      2. 小武 小z

        以前的服务器已经被qq邮箱系统列入黑名单了。可能是由于垃圾评论的邮件提醒造成的。导致我长时间也不能收到提醒,无奈才换到了163邮箱

        1. 小z 小武

          的确如此,如果一个邮箱一天内发送的邮件过多也会被限制。貌似默认使用mail()函数会出现由XX代发,SMTP的方式应该不会吧。

          1. 小武 小z

            理论上是这样的. .
            不过我现在也在使用mail()函数发送邮件,但没有出现代发的情况, 不知为何

          2. 小z 小武

            使用mail()函数发送邮件进入垃圾箱的机率会比较高,还是改为用SMTP发送吧。http://www.xiaoz.me/archives/5064

          1. 小z 灵趣网

            检查一下配置是否正确呢。