填写您的邮件地址,订阅我们的精彩内容:

解决wordpress评论回复时不能邮件通知

787

wordpress评论回复时的邮件通知具有重要的用户意义,首先,用户在网站留言要么觉得文章写得好,表达赞赏之意,要么觉得文章中存在某点问题或不解,甚至提出更好的解决办法,再者用户看完文章后仍然不能解决自己的问题,因此留言寻求帮助。启用评论回复的邮件通知,不仅能和访客形成良性的循环交流,增加网站用户粘度,同时也能让博客增加生气,留言多了以后增加整体网站的权重。

但是,由于各种条件的限制,很多wordpress博客即使安装了插件,仍然不能实现留言评论邮件通知的现实效果。那么,首先你要先确定你是属于问题的哪种情况:

1、邮件无法发送,无论是留言,还是注册,邮件根本无法使用;
2、某些情况下邮件可以发送,或者我已经安装了邮件插件,可以发送邮件,但无法实现评论发送邮件的功能
3、我已经试过了网上很多方法,也能发送邮件,别人评论时我的管理员邮箱也能收到评论提示,但我回复的时候别人就是收不到邮件

以上的情况是最常见的,如果你有其他问题,通过本文后仍然无法解决,请留言。以上的这些问题我在网上稍微收集了下,反映为以下几种情况和方法:

1、http://blog.chaojiwudi.com/2010/12/cannot_send_comment_reply_notification_when_use_some_theme/
2、http://www.nenew.net/wordpress-email-notify.html
3、http://www.xeker.org/archives/1424
4、http://www.ruijienet.com/661

上面这些文章反映了一些情况,如Linux主机和windows主机不同引起的邮件发送能力,Mail()的禁用,wordpress邮件插件,留言评论回复邮件通知插件等等,甚至还提到了一些wordpress核心文件中某些函数功能及修改的问题。接下来,本文将做一个相对比较全面的总结,希望对你有用。

一、解决邮件发送问题

其实无论你是Lunix主机还是WIN主机,都不影响邮件发送能力,这要看主机服务商是否提供了mail()函数,这在php针探中可以查看。不过有些主机即使php针探中显示开放,也不能发送邮件,可能于主机的其他设置和wordpress本身函数的不适应造成。因此采用邮件发送插件成为第二选择。我只提供参考插件wp-mail-smtp插件。wordpress邮件插件都是通过smtp设置实现邮件发送,拿163邮箱来说,在设置选项中有一项是POP3/SMTP/IMAP,在这项设置中开启smtp,开启后你就可以在其他地方利用邮箱的服务向别人发送邮件了,例如你的foxmail客户端,你自己的网站程序(discuz等)。在wp-mail-smtp插件激活后进入设置。填写的内容也很简单。主要的项目有:你的发信邮箱,你的发信署名,你是选择用smtp发送邮件还是php函数发送(选择smtp),host:smtp.163.com,port:25,是否使用ssl或tls登录(选择第一项:不使用),你在163的用户名(无@163.com),密码。经过上面这些项目的设置,保存之后可以找一个自己的邮箱发送测试邮件,如果收到邮件就算成功。一般用163的邮箱速度会很快,收不到邮件的话修改上面的各个项目进行尝试,直到能收到邮件为止。如果还收不到,可更换插件、主题、本地测试等方法,看是否为wordpress程序错误,如果都不是,那么可能你的服务器不支持smtp邮件发送,这就需要和服务商进行沟通了。

二、解决邮件问题后选择评论回复邮件通知的实现方式

实现的方式有两种,一种是插件实现,另一种是写程序自动实现。当然,似乎还有人修改wordpress核心文件,通过修改邮件递送的函数,改变参数的方式实现,这种方法不适合一般水平的朋友,而且也太麻烦。

插件推荐两款:comment-reply-notificationmailtocommenter,这两款可以最轻量的实现功能,并在后台中可以设置发送邮件的内容格式。可以参考我最开始给出的几个链接文章中的图例。具体设置就不用多讲了,因为是中文,大家可以看懂,稍加尝试后就可以确定具体使用方法。

无插件实现留言评论邮件回复功能:在上文的链接中,网友已经给出了很明确的代码。我则推荐下面的代码,将下面代码中邮箱地址的地方稍加修改,然后全部拷贝到主题文件目录下的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.
$wp_email= ‘frustigor@163.com’;//这里可以修改为你自己的邮箱
$subject = ‘您在’ . get_option(“blogname”) . ‘中《’ . get_the_title($comment->comment_post_ID) . ‘》一文的留言有回复了!去看看吧 ^_^’;
$message = ‘
<div style=”margin: 1em 40px 1em 40px;background-color:#eef2fa;border:1px solid #d8e3e8;color:#111;padding: 0 15px;-moz-border-radius:5px;-webkit-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;”>
<p>Hi !<strong>’ . trim(get_comment($parent_id)->comment_author) . ‘</strong>,您好!<br />您曾在<strong>《’ . get_the_title($comment->comment_post_ID) . ‘》</strong>的留言有了新回复。</p>
</div>
<div style=”margin: 1em 40px 1em 40px;background-color:#eef2fa;border:1px solid #d8e3e8;color:#111;padding: 0 15px;-moz-border-radius:5px;-webkit-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;”>
<p><strong>您说:</strong>’ . trim(get_comment($parent_id)->comment_content) . ‘</p>
<p><strong>’ . trim($comment->comment_author) . ‘回复:</strong>’ . trim($comment->comment_content) . ‘</p>
<p>您可以点击<a href=”‘ . htmlspecialchars(get_comment_link($parent_id)) . ‘”>查看完整的回复內容。</a></p>
<p>欢迎再度光临 <a href=”‘ . get_option(‘home’) . ‘”>’ . get_option(‘blogname’) . ‘</a></p>
<p>PS:虽然您收到本邮件,但本邮件是通过乌徒帮转发过来的,你回复邮件只会让乌徒帮frustigor收到邮件,不能和评论者一起交流,所以还是跟随上面的链接回原文讨论吧。</p>
</div>’;
$from = “From: “” . get_option(‘blogname’) . “” <$wp_email>”;
$headers = “$fromnContent-Type: text/html; charset=” . get_option(‘blog_charset’) . “n”;
wp_mail( $to, $subject, $message, $headers );
}
}
add_action(‘comment_post’, ‘comment_mail_notify’);
// — END —————————————-

完成上面的工作后,上传文件,覆盖,测试留言及回复。

三、仍然遇到问题

通过上面的一些工作后,你仍然遇到问题,该功能仍然无法实现,你需要做以下几个步骤:

1、先平静下来,确定你的wordpress已经可以发送邮件了,只是还不能实现留言评论邮件通知;
2、检查你的插件是否设置正确,是否有几种插件,或者你的主题函数是否存在邮件发送上的冲突或占用。可以更换主题,关闭其他插件,本地测试的方法进行测试,排除冲突;
3、结合这篇文章,看看能否修改wordpress核心函数来实现功能。


好了,通过以上的内容,你是否已经解决了你的问题,实现了wordpress留言评论邮件通知的功能呢?在本文下面回复,让我知道你的情况吧!

下面我简单说几句