免插件实现WordPress邮件评论回复

WordPress自带有一系列的邮件通知功能,不过在VPS上搭建了LNMP后建立的WordPress,似乎自带的发送邮件的功能就失效。邮件提醒功能,可以让自己知道网站的一些情况,也可以促进文章与访客之间的交流,所以还是觉得挺重要的。

php-sendmail

一、VPS系统及其环境

由于之前一直在VPS上都用的是CentOS,因此我现在依旧使用着自己相对熟悉点的CentOS,当然LNMP也是一样的,几年前就用LNMP了所以也还是用LNMP。

  • CentOS7 ×64
  • LNMP1.4
  • WordPress 4.9

由于插件会影响到WordPress的性能,因而我不打算使用插件;其次我不是太喜欢写一堆密码到我的配置文件里所以我也放弃了SMTP,最终决定使用Linux上的Sendmail通过PHP的mail()函数来进行发邮件。

二、安装及配置Sendmail

最早我使用VPS和LNMP来搭建WordPress的时候,那个时候大概是CentOS5吧,我大约记得我仅仅是卸载了Sendmail然后安装最新版的Sendmail,并配置function函数即可实现发邮件。不过在CentOS7中,我依然按着原来的方式,不过貌似不是太起效。最终测试了好多次才成功。

1.卸载Sendmail。

yum -y remove sendmail

2.重新安装Sendmail。

yum install -y sendmail

yum install sendmail sendmail-cf m4

3.Vim打开php.ini,不习惯Vim的,可以通过SFTP下载到本地修改后覆盖上传。

vim /usr/local/php/etc/php.ini
4.修改php.ini里的发邮件函数,找到sendmail_path,将注释符号删除,并设置路径。
sendmail_path = /usr/sbin/sendmail-i -t
 5.设置Sendmail网络服务权限。
#备份配置文件
cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc2014.bak
#配置网络服务权限,
vi /etc/mail/sendmail.mc
搜索定位到DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl,将127.0.0.1修改为0.0.0.0;即表示任何主机都可以访问Sendmail服务。
6.启动Senmail服务,并设置为开机启动。
#启动服务
service sendmail start
#设置为开机启动
chkconfig sendmail on
7.配置好之后重启PHP即可,不过我还是推荐重启VPS。
#重启PHP
service php-fpm restart
#重启VPS
reboot
这样Sendmail即可配置成功,你可以到WordPress的密码找回页面找回密码试一试,一般来说就不会提示mail()函数被禁用之类的了。

三、WordPress评论回复设置

果你的Sendmail配置没问题,那么接下来的问题就很简单了。至于你的Sendmail是否配置成功,最简单的办法就是去找回密码的地方找回密码试一试看看可以收到邮件不。还可以换个浏览器随便给文章评论一下,看看你的邮箱可以收到邮件不。我在网上找了一个模板,感觉还不错,虽然界面很熟悉( >﹏<。)~呜呜呜……

将以下代码复制到主题的function.php中即可~~

/**
* WordPress 邮件评论回复通
*/
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)) . ‘”>.get_option</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-comments-email-reply
(点击放大)
哈哈,不是太想安装代码显示美化的插件,所以看着那个函数有点乱~~~不过嘛不影响使用只要把上下备注的地方也一同考进去到时候你看function.php的时候也知道这段代码是什么意思了。

发表评论