简单一段代码给博客添加邮件提醒功能

发布于 2023-10-12  7k 次阅读


本文于 2023年10月12日 7:10 更新,注意查看最新内容

前言

最近越发感受到给博客添加评论邮件提醒的重要性,就好像你有一座宅子,有人来参观,有人发表看法,有人给你写留言,如果你没有邮件提醒,这些来访就像一个个孤立的消息,只有等到你什么时候回家,才有可能被知道。

但当你添加邮件提醒之后,这消息就有可能在被动中被主动提前知道,无疑增加博客与博客之间的连接性,毕竟大部分的访客其实还是博友圈本身。

当然,也有人说,我想把博客和生活分开,现实中我有办法主动触发去了解关于自己博客相关消息的方式,例如待办等,但我估摸你有主动触发了解消息的方式,但没有自动去通知留言方的方式,所以还是强烈建议添加一个评论邮件提醒功能。

方法

这里主要介绍通用的方法,也正是本博客正在使用的方法,其实现在很多主题都内置了邮件提醒功能,但我个人感觉,早期的大部分博客主题是没有考虑评论邮件提醒的功能,或者也有,但是没有好好利用起来,下面介绍方法:

1、在WordPress后台找到外观-主题文件编辑器。

2、在主题文件中选择模板函数(functions.php)

注意:老版本WordPress可能无法直接从后台编辑模板函数文件,也可以从服务器本地编辑该文件,就是要记得注意当前主题的路径,别修改到其他主题的模板函数文件了。

3、任意位置插入如下代码(根据注释内容修改演示信息

function mail_smtp( $phpmailer ) {
$phpmailer->IsSMTP();
$phpmailer->SMTPAuth = true; //启用SMTPAuth服务
$phpmailer->Port = 465; //MTP邮件发送端口,这个和下面的对应,如果这里填写25,则下面为空白
$phpmailer->SMTPSecure ="ssl"; //是否验证 ssl,这个和上面的对应,如果不填写,则上面的端口须为25
$phpmailer->Host = "smtp.qq.com"; //邮箱的SMTP服务器地址,如果是163的则为:smtp.163.com
$phpmailer->Username = "admin@qq.com"; //你的邮箱地址
$phpmailer->Password ="UsH9]iRG,S6OR1{sK("; //你的邮箱授权密码(有的是登录密码)
}
add_action('phpmailer_init', 'mail_smtp');
//下面这个很重要,需跟上面smtp邮箱一致才行
function ashuwp_wp_mail_from( $original_email_address ) {
return 'admin@qq.com';
}
add_filter( 'wp_mail_from', 'ashuwp_wp_mail_from' );
//修改WordPress发送邮件的发件人
function new_from_name($email){
$wp_from_name = get_option('blogname');
return $wp_from_name;
}
add_filter('wp_mail_from_name', 'new_from_name');
/*
 * 评论邮件回复
 */
function comment_mail_notify($comment_id){
  $mail_user_name = akina_option('mail_user_name') ? akina_option('mail_user_name') : 'poi';
    $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 = $mail_user_name . '@' . 'email.' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = '你在 [' . get_option("blogname") . '] 的留言有了回应';
    $message = '
    <table border="1" cellpadding="0" cellspacing="0" width="600" align="center" style="border-collapse: collapse; border-style: solid; border-width: 1;border-color:#ddd;">
  <tbody>
          <tr>
            <td>
        <table align="center" border="0" cellpadding="0" cellspacing="0" width="600" height="48" >
                    <tbody><tr>
                        <td width="100" align="center" style="border-right:1px solid #ddd;"> '. get_option("blogname").'</td>
                        <td width="300" style="padding-left:20px; color:#ec3409;"><strong>您有一条来自' . get_option("blogname") . ' 的回复,系统发送,请勿回复</strong></td>
            </tr>
          </tbody>
        </table>
      </td>
          </tr>
          <tr>
            <td  style="padding:15px;"><p><strong>' . trim(get_comment($parent_id)->comment_author) . '</strong>, 你好!</span>
              <p>你在《' . get_the_title($comment->comment_post_ID) . '》的留言:</p><p style="border-left:3px solid #ddd;padding-left:1rem;color:#999;">'
        . trim(get_comment($parent_id)->comment_content) . '</p><p>
              ' . trim($comment->comment_author) . ' 给你的回复:</p><p style="border-left:3px solid #ddd;padding-left:1rem;color:#999;">'
        . trim($comment->comment_content) . '</p>
        <center ><a href="' . htmlspecialchars(get_comment_link($parent_id)) . '" target="_blank" style="background-color:#6ec3c8; border-radius:10px; display:inline-block; color:#fff; padding:15px 20px 15px 20px; text-decoration:none;margin-top:20px; margin-bottom:20px;">点击查看完整内容</a></center>
</td>
          </tr>
          <tr>
            <td align="center" valign="center" height="38" style="font-size:0.8rem; color:#999;">Copyright © '.get_option("blogname").'</td>
          </tr>
      </tbody>
  </table>';
    $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 );
  }
}
add_action('comment_post', 'comment_mail_notify');

PS:代码是几年前从一个大佬的博客copy的,但大佬的博客早已关闭,这里就不表明出处了,总之非我原创哈。

4、在自己博客任意页面下评论,查看邮箱是否有提醒,若有提醒证明已成功开启评论邮件提醒,反之出现了异常。

异常情况排查思路

大概率是邮箱授权密码出现了问题,如果使用QQ邮箱的服务,可以可以查看QQ邮箱帮助系统 查找相关问题的解决方案,QQ邮箱记得绑定手机号码,个人之前出现异常是通过绑定手机号码解决的。

演示

后话

如果不想通过修改代码来实现该功能,可以尝试使用相关的插件服务,例如:WP Mail Smtp - SMTP7,但记得提前备份网站,以及数据库,测试相关插件时,网站被折腾崩了一次,得亏每天数据都有备份,逃~


这短短的一生,我们最终都会失去。