wordpress评论回复自动发邮件的功能

时间:2024-03-09 16:25:50

A、插件流,可以说WP强大的插件功能的确能省事不少。

插件的办法一般是两步:第一实现成功发邮件,第二时间评论自动回复,这就需要用到两个插件,一个是Configure SMTP,一个是Mail To Commenter。至于两个插件的用法,可以去度娘,多得很。这里说一下在SMTP设置的时候第一个Gmail的选项不要勾选,要不下面的SMTP HOST无法修改。下面是以QQ邮箱为例:(QQ邮箱应该是目前用的最多的。)

SMTP host : smtp.qq.com
SMTP port : 465
Secure connection prefix : ssl
Use SMTPAuth? : 选中
SMTP username : ******@qq.com  //你的QQ邮箱
SMTP password : ******  //邮箱密码
点 Save Changes 保存,然后点击下面 Send test e-mail 按钮发送一个测试信,如果邮箱收到邮件那么就成功了。

这个办法是目前最多的办法,简单嘛。但是不一定能成功,即便你SMTP成功之后,依旧不一定会成功。至于具体啥原因,可能是主题,可能是版本,可能是意想不到的原因。所以我不推荐使用本办法。下面主机吧分享使用代码来实现。

B、代码实现,老是说,用代码的办法,百度找出来的方法也有很多种,下面是几种可用的代码。

评论邮件通知的方法:

1.所有回复都发送邮件通知

登陆博客后台,点击“外观”选项卡下的“编辑”选项进入主题编辑界面,在functions.php文件中的<?php和?>之间添加以下函数即可:

/* comment_mail_notify v1.0 by willin kan. (所有回复都发邮件) */
function comment_mail_notify($comment_id) {
  $comment = get_comment($comment_id);
  $parent_id = $comment->comment_parent ? $comment->comment_parent : \'\';
  $spam_confirmed = $comment->comment_approved;
  if (($parent_id != \'\') && ($spam_confirmed != \'spam\')) {
    $wp_email = \'no-reply@\' . preg_replace(\'#^www\.#\', \'\', strtolower($_SERVER[\'SERVER_NAME\'])); //e-mail 发出点, no-reply 可改为可用的 e-mail.
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = \'您在 [\' . get_option("blogname") . \'] 的留言有了回复\';
    $message = \'
    <div style=" border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>\' . trim(get_comment($parent_id)->comment_author) . \', 您好!</p>
      <p>您曾在《\' . get_the_title($comment->comment_post_ID) . \'》的留言:<br />\'
       . trim(get_comment($parent_id)->comment_content) . \'</p>
      <p>\' . trim($comment->comment_author) . \' 给您的回复:<br />\'
       . trim($comment->comment_content) . \'<br /></p>
      <p>您可以点击 查看回复完整內容</p>
      <p>欢迎再度光临 \' . get_option(\'blogname\') . \'</p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </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 );
    //echo \'mail to \', $to, \'<br/> \' , $subject, $message; // for testing
  }
}
add_action(\'comment_post\', \'comment_mail_notify\');
// -- END ----------------------------------------

2.让访客自己选择是否邮件通知

在functions.php文件中的<?php和?>之间添加以下函数,该函数将会在评论框底部生成要不要收回复通知的选项(与主题有关)

/* 开始*/
function comment_mail_notify($comment_id) {
  $admin_notify = \'1\'; // admin 要不要收回复通知 ( \'1\'=要 ; \'0\'=不要 )
  $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 : \'\';
  global $wpdb;
  if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == \'\')
    $wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;");
  if (($comment_author_email != $admin_email && isset($_POST[\'comment_mail_notify\'])) || ($comment_author_email == $admin_email && $admin_notify == \'1\'))
    $wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify=\'1\' WHERE comment_ID=\'$comment_id\'");
  $notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : \'0\';
  $spam_confirmed = $comment->comment_approved;
  if ($parent_id != \'\' && $spam_confirmed != \'spam\' && $notify == \'1\') {
    $wp_email = \'no-reply@\' . preg_replace(\'#^www\.#\', \'\', strtolower($_SERVER[\'SERVER_NAME\'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = \'您在 [\' . get_option("blogname") . \'] 的留言有了回复\';
    $message = \'
    <div style=" border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>\' . trim(get_comment($parent_id)->comment_author) . \', 您好!</p>
      <p>您曾在《\' . get_the_title($comment->comment_post_ID) . \'》的留言:<br />\'
       . trim(get_comment($parent_id)->comment_content) . \'</p>
      <p>\' . trim($comment->comment_author) . \' 给您的回复:<br />\'
       . trim($comment->comment_content) . \'<br /></p>
      <p>您可以点击查看回复的完整內容</p>
      <p>还要再度光临 \' . get_option(\'blogname\') . \'</p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </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 );
    //echo \'mail to \', $to, \'<br/> \' , $subject, $message; // for testing
  }
}
add_action(\'comment_post\', \'comment_mail_notify\');

/* 自动加勾选栏 */
function add_checkbox() {
  echo \'<input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin-left:20px;" /><label for="comment_mail_notify">有人回复时邮件通知我</label>\';
}
add_action(\'comment_form\', \'add_checkbox\');

3.让博客管理员决定什么情况下发邮件

在functions.php文件中的<?php和?>之间添加以下函数:

/* 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 的回复才可发.
    可视个人需修改上面的条件.
    */
    $wp_email = \'no-reply@\' . preg_replace(\'#^www\.#\', \'\', strtolower($_SERVER[\'SERVER_NAME\'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $subject = \'您在 [\' . get_option("blogname") . \'] 的留言有了回复\';
    $message = \'
    <div style=" border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>\' . trim(get_comment($parent_id)->comment_author) . \', 您好!</p>
      <p>您曾在《\' . get_the_title($comment->comment_post_ID) . \'》的留言:<br />\'
       . trim(get_comment($parent_id)->comment_content) . \'</p>
      <p>\' . trim($comment->comment_author) . \' 给您的回复:<br />\'
       . trim($comment->comment_content) . \'<br /></p>
      <p>您可以点击 查看回复的完整內容</p>
      <p>还要再度光临 \' . get_option(\'blogname\') . \'</p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </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 );
    //echo \'mail to \', $to, \'<br/> \' , $subject, $message; // for testing
  }
}
add_action(\'comment_post\', \'comment_mail_notify\');
// -- END ----------------------------------------

4、WORDPRESS实现评论审核通过 邮件回复功能

先在WP设置中,两个关于邮件的选项勾选:

wordpress邮件

wordpress邮件

然后将下面的代码添加到当前主题的 functions.php 即可:

/* 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 的回复才可发.
    可视个人需修改上面的条件.
    */
    $wp_email = \'no-reply@\' . preg_replace(\'#^www\.#\', \'\', strtolower($_SERVER[\'SERVER_NAME\'])); // e-mail 发出点, no-reply 可改为可用的 e-mail.
    $subject = \'您在 [\' . get_option("blogname") . \'] 的留言有了回复\';
    $message = \'
    <div style=" border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
      <p>\' . trim(get_comment($parent_id)->comment_author) . \', 您好!</p>
      <p>您曾在《\' . get_the_title($comment->comment_post_ID) . \'》的留言:<br />\'
       . trim(get_comment($parent_id)->comment_content) . \'</p>
      <p>\' . trim($comment->comment_author) . \' 给您的回复:<br />\'
       . trim($comment->comment_content) . \'<br /></p>
      <p>您可以点击 查看回复的完整內容</p>
      <p>还要再度光临 \' . get_option(\'blogname\') . \'</p>
      <p>(此邮件由系统自动发送,请勿回复.)</p>
    </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 );
    //echo \'mail to \', $to, \'<br/> \' , $subject, $message; // for testing
  }
}
add_action(\'comment_post\', \'comment_mail_notify\');
// -- END ----------------------------------------

以上代码来自百度经验,以及一些帖子经验,因为无法追溯具体出处,故没法注明版权信息,请远作者谅解!

好了,经过一番折腾,邮件测试一切OK。