首页 / 技术 / 正文

解决WordPress评论回复通知邮件无法发送

2015年02月25日 9 条评论 ... 技术

使用社会化评论插件的朋友会发现,使用之后,访客的回访率非常高,文章评论互动也很活跃,这是因为社会化评论插件的覆盖率比较广,如果使用社会化评论插件评论过的用户,只要访问了安装同样插件的网站,就会收到醒目的通知,吸引用户回访互动,这对增加网站用户黏度有着不可小觑的作用。

喜欢原生 WordPress 评论模板的用户可能会头疼了,原生 WordPress 一般也有自动发送通知邮件的功能,只要有人回复评论,就会自动发送。不过,可能正是因为 WordPress 这样肆无忌惮的发送邮件,绝大多数电子邮箱服务商已经完全过滤了此类邮件,更有大部分主机服务商为了避免自己的主机 IP 被其他人标记为 spam ,直接禁止了 mail() 函数的使用。因此 WordPress 原生评论模板的通知功能几乎无作用了。

如果实在不希望换用插件评论的话,可以试一下下面的办法,可以解决收不到邮件的问题。

我们可以换用比较可靠的 STMP 方式来发送邮件。

获取STMP邮箱

首先我们要有一个专门用来发送邮件的邮箱,所有电子邮箱都可以,不过建议邮箱地址跟自己的网站名称统一起来。所有的邮箱都有自己的 STMP 服务器,只是大部分邮箱默认没有开启,所以想要使用 STMP 发信还需要手动设置开启。一般来讲,需要登录邮箱,找到设置页面,然后手动开启,具体可以查看邮件服务商的帮助页面,开启 STMP 功能之后,还要知道 STMP 的信息,具体也可以在帮助页上找到。需要的内容有:服务器名和端口名,端口名有 SSL 的和非 SSL 的,一般用非 SSL 的端口号,不要搞错了。

安装 WordPress STMP 插件

很多人建议安装 Configure SMTP 插件,我个人感觉这个插件有些复杂,我建议安装 WP-Mail-SMTP 这款插件,插件的原理是自动替换 WordPress 内核中的 wp_mail() 函数。直接在wp后台搜索安装,安装完成之后,在“设置”→“Email”设置参数。

参数设置的注意事项我写在图片里了,STMP服务器信息需要按照你选用的邮件服务器如实填写。不要使用 SSL 加密。

stmp设置一

stmp设置二

保存之后,可以在设置页下方测试一下邮件发送,如果收到了测试邮件的话,就证明可以使用了。

部署WordPress代码

这是一个非常经典的自动回复评论的代码,很多主题都在用,不过我对其进行稍加改造了一下,增加了评论的链接,可以直接点击访问评论。

  1. /* comment_mail_notify v1.0 by willin kan. */
  2. function comment_mail_notify($comment_id) {
  3.   $comment = get_comment($comment_id);
  4.   $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
  5.   $spam_confirmed = $comment->comment_approved;
  6.   if (($parent_id != '') && ($spam_confirmed != 'spam')) {
  7.     $wp_email = 'xxxxx@163.com'; //e-mail 发出点, no-reply 可改为可用的 e-mail.
  8.     $to = trim(get_comment($parent_id)->comment_author_email);
  9.     $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复';
  10.     $message = '
  11.     <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;">
  12.       <p>' . trim(get_comment($parent_id)->comment_author) . ', 您好!</p>
  13.       <p><strong>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:</strong><br />'
  14.        . trim(get_comment($parent_id)->comment_content) . '</p>
  15.       <p><strong>' . trim($comment->comment_author) . ' 给您的回复:</strong><br />'
  16.        . trim($comment->comment_content) . '<br /></p>
  17.       <p>您可以点击 <a href="' . htmlspecialchars(get_comment_link($parent_id)) . '" target="_blank">查看回复完整內容</a></p>
  18.       <p>欢迎再度光临 <a href="http://www.yelook.com" target="_blank">' . get_option('blogname') . '</a></p>
  19.       <p>(此邮件由系统自动发送,请勿回复.)</p>
  20.     </div>';
  21.       $from = "From: \"" . get_option('blogname') . "\" <$wp_email>";
  22.       $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
  23.       wp_mail( $to, $subject, $message, $headers );
  24.   }
  25. }
  26. add_action('comment_post', 'comment_mail_notify');

使用的时候注意把代码中我的网站链接和邮箱换成你自己的。把这段代码放置在 functions.php 文件中。这样一来,所有的工作就完成了,然后就是测试发信了。

 

测试效果是收到的邮件是自己设置163邮箱发来的,虽然有的邮件被识别为垃圾邮件放在垃圾箱,但是起码要比直接拒收要好得多。

邮件测试

截图中的邮件是我在本机搭建的 WordPress 环境中测试发送的,所以我用的发信邮箱是另外的测试邮箱。

9 条评论

Loading...
  1. wkun

    第三方评论插件总不太让人放心,不存在本地的话可能会因为第三方的原因而丢失。 :arrow:

    2015-03-3 [回复]
  2. Tojo17

    博主你好,应该是 SMTP 哦~

    2017-10-29 [回复]
    • 有野出没

      哈哈,我的锅我的锅

      2017-11-2 [回复]
  3. Albert

    非常感谢博主的分享,终于成功给自己的站配上了评论回复功能!!!

    2018-03-31 [回复]
  4. 蒲公英

    用了博主的代码,成功实现评论留言回复,特来感谢!

    2018-04-28 [回复]
  5. 小小怪

    还好你有这个邮件回复插件,时隔两年觉得你的主题很好,去邮件找到了你,哈哈哈哈哈哈哈

    2019-12-2 [回复]
  6. ALUM

    感谢,很有用,不过代码第七行这里是做什么的呢?
    $wp_email = ‘xxxxx@163.com’; //e-mail 发出点, no-reply 可改为可用的 e-mail.
    我发现我不小心把xxxxx@163.com写错了,但是并不影响发件

    2019-12-27 [回复]
    • 有野出没

      不影响发邮件,但是影响邮件展示的内容。

      2019-12-27 [回复]
      • ALUM

        好像有些懂了,$wp_email这里如果填 no-reply ,那么发出去邮件就是no-reply (xxxxx@163.com)这样吗?

        不过我用的WP SMTP,必须强制填昵称,可能就覆盖这里了

        2019-12-27 [回复]

发布评论