升级版:wordpress回复任意评论后自动发邮件通知
在wordpress中,回复了某位评论者后,想要邮件通知,有很多插件可以用。但你若懂点代码的话,用两段函数也是很方便的。前面我整理过一次,但那段函数只能是管理员回复才会邮件通知,并且不支持嵌套和@用户方式,这次在网上搜罗了一番,找到一个函数,给任意父级评论回复了留言,均可给父级评论的邮件发邮件通知,即:支持嵌套和@用户方式。
具体代码如下:
function comment_mail_notify($comment_id) {
$comment = get_comment($comment_id); //依据id获取这条评论相关数据
$content=$comment->comment_content; //对评论内容进行匹配
$match_count=preg_match_all('/<a href="#comment-([0-9]+)?" rel="nofollow">/si',$content,$matchs);
if($match_count>0){ //假设匹配到了
foreach($matchs[1] as $parent_id){ //对每一个子匹配都进行邮件发送操作
SimPaled_send_email($parent_id,$comment);
}}elseif($comment->comment_parent!='0'){ //以防万一有人有意删了@回复,还能够通过查找父级评论id来确定邮件发送对象
$parent_id=$comment->comment_parent;
SimPaled_send_email($parent_id,$comment);
}else return;
}
add_action('comment_post', 'comment_mail_notify');
function SimPaled_send_email($parent_id,$comment){ //发送邮件的函数
$admin_email = get_bloginfo ('admin_email'); //管理员邮箱
$parent_comment=get_comment($parent_id); //获取被回复人(或叫父级评论)相关信息
$author_email=$comment->comment_author_email; //评论人邮箱
$to = trim($parent_comment->comment_author_email);//被回复人邮箱
$spam_confirmed = $comment->comment_approved;
if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_email) { //垃圾评论、管理员和作者邮箱不发送邮件通知
$wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // 发件人email,可直接修改为自己的邮箱。
$subject = '您在 [' . get_option("blogname") . '] 的留言有了新回复';
$message = '
<div id="contentDiv" style="position: relative;font-size:14px;height:auto;padding:15px 15px 10px 15px;*padding:15px 15px 0 15px;overflow:visible;min-height:100px;_height:100px;" class=" body">
<div id="mailContentContainer" style="font-size: 14px; padding: 0px; height: auto; min-height: auto; font-family: "lucida Grande",Verdana; position: relative; margin-right: 0px;">
<div style="background-color:white;border-top:2px solid #12ADDB;box-shadow:0 1px 3px #AAAAAA;line-height:180%;padding:0 15px 12px;max-width:500px;margin:50px auto;color:#222;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;">> </span>您在博客<a style="text-decoration:none;color: #12ADDB;" href="' . home_url() . '" target="_blank">' . get_option("blogname") . '</a>上的留言有回复啦!</h2>
<div style="padding:0 12px 0 12px;margin-top:18px">
<p>亲爱的<b>' . trim(get_comment($parent_id)->comment_author) . '</b>:</p>
<p>您曾在' . get_option("blogname") . '的文章《<a style="text-decoration:none;color: #12ADDB;" target="_blank" href="' . htmlspecialchars(get_comment_link($parent_id,array("type" => "all"))) . '">' . get_the_title($comment->comment_post_ID) . '</a>》发表评论:</p>
<p style="background-color: #12ADDB;border: 0px solid #DDD;padding: 10px 15px;margin:18px 0;color: #ffffff;border-radius: 10px;">' . trim(get_comment($parent_id)->comment_content) . '</p>
<p><b>'. $comment->comment_author .'</b>给您的回复如下:</p>
<p style="background-color: #ff6574;border: 0px solid #DDD;padding: 10px 15px;margin:18px 0;color: #ffffff;border-radius: 10px;">' . trim($comment->comment_content) . '</p>
<p>回复时间:' . trim($comment->comment_date) . '</p>
<p>本邮件为系统自动发送,请勿直接回复,感谢您对<a style="text-decoration:none;color: #12ADDB;" target="_blank" href="' . home_url() . '">' . get_option("blogname") . '</a>的关注!</p>
</div>
</div>
</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 );
}
}
同时也要加上这段代码,进行配置smtp服务,才能执行邮件的发送:
function iYuRen_mail_smtp($phpmailer) { //使用smtp发送邮件
$phpmailer->AddReplyTo('your@mail.com','my email');//回复邮件的地址和名字
$phpmailer->From = 'send@mailcom'; //发件人地址
$phpmailer->FromName = '系统通知'; //发件人昵称
$phpmailer->Host = 'smtp.mail.com'; //SMTP服务器地址
$phpmailer->Port = '465'; //SMTP邮件发送端口
$phpmailer->SMTPSecure = 'ssl';//SMTP加密方式(SSL/TLS)没有为空即可
$phpmailer->Username = 'send@mail.com'; //邮箱帐号
$phpmailer->Password = '12345678'; //邮箱密码
$phpmailer->IsSMTP();
$phpmailer->SMTPAuth = true; //启用SMTPAuth服务
}
add_action('phpmailer_init', 'iYuRen_mail_smtp');