WordPress 评论回复通知邮件优化

很久之前看到 kn007 文章 [Postfix进阶]利用Fail2ban防止爆破和攻击 提到邮件提醒同时包含 text/plain 与 text/html 两个版本,因此能获得满分。

2020-07-07 新版本:https://cyhour.com/1382

值得一提的是,目前 WordPress 评论回复通知邮件提醒同时包含 text/plain 与 text/html 两个版本,这使得 HTML 版本的邮件也能获得满分。并且全新的邮件风格,具有不错的兼容性(响应式)。

那时候就蠢蠢欲动想折腾,无奈用的虚拟主机 ip 已在垃圾邮件黑名单,加上没有现成的代码,又不好意思伸手要,就放下了。

九月底把博客搬到廉价的 Bandwagon Host KVM VPS,用上 Postfix,又忍不住要折腾。几经周折,用 davidnknight 的 send_email.php 代码勉强折腾得差不多,不过邮件评分只有 7.2。

只好厚着脸皮找 kn007 要方法,前几天在他博客新文章看到提供单封邮件双版本思路和方法作者:LWL。在他博客找到了双版本邮件实现代码:记弃用多说牵扯出来的一堆坑

不过文章贴的代码有点小坑,我是在 LWL Hermit X - 全新 WordPress 播放器插件代码(发送更新通知)里找到了实例。

//Hook phpmailer init action, then force change message_type to alt.
global $phpmailer;
add_action('phpmailer_init', function (&$phpmailer) use ($message_html, $message_plain){
$phpmailer->isHTML(true);
$phpmailer->Body = $message_html;
$phpmailer->AltBody = $message_plain;
$phpmailer->CharSet = 'utf-8';
$phpmailer->Encoding = 'base64';
$phpmailer->MessageID = '<' . md5($message_plain.microtime().uniqid()).'@hermit.x.update>';
});

把代码集成到原本评论回复通知邮件代码中,双版本邮件是实现了,不过并不能满分,说是 html 代码百分比不达标,扣分。言下之意是 html 版本邮件不能太简洁?

于是扒了 kn007 的邮件模板测试,mail-tester 妥妥的打了十分。

下面是老头目前在用的 WordPress 评论回复邮件通知完整代码:

add_action('comment_post','comment_mail_notify');
add_action('comment_unapproved_to_approved', 'comment_mail_notify');//未通过审核的评论,审核后再通知评论者

function comment_mail_notify($comment_id) {
$comment = get_comment($comment_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){
comment_mail_notify_sendmail($parent_id,$comment);
}
}elseif($comment->comment_parent!='0'){
$parent_id=$comment->comment_parent;
comment_mail_notify_sendmail($parent_id,$comment);
}else return;
}

function comment_mail_notify_sendmail($parent_id,$comment){
$author_email=$comment->comment_author_email;//评论人邮箱
$to = trim(get_comment($parent_id)->comment_author_email);//被回复人邮箱
$spam_confirmed = $comment->comment_approved;
if ( ! ( ($spam_confirmed == '1') && ( $to != $author_email ) && ( get_bloginfo ('admin_email') != $to ) ) ) return;
$wp_email = 'noreply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
$subject = '您在『' . get_option("blogname") . '』的评论有新回复';
$message_html = '<!DOCTYPE html><html style="font-size:100%;margin:0;padding:0"><meta name="viewport" content="width=device-width"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>您在『' . get_option("blogname") . '』的评论有新回复</title><style type="text/css">.wp-smiley{width:23px!important;height:auto!important;max-height:none!important;margin-right:5px;}</style><div bgcolor="#FFF" style="clear:both!important;display:block!important;max-width:600px!important;margin:0 auto;padding:16px;border-width:0;box-shadow:0 1px 2px rgba(9,2,1,.1),0 0 10px rgba(0,0,0,.06)"><h1 style="font-weight:400;font-size:1.35em;color:#333;margin:0 0 10px;padding-bottom:10px;border-bottom:1px solid rgba(0,0,0,.08)"><a style="text-decoration:none;color:#333" href="'.get_option('home').'" target="_blank">'.get_option("blogname").'</a></h1><p style="font-size:14px;color:#354450;font-weight:400;margin:20px 0 0;padding:0">'.trim(get_comment($parent_id)->comment_author).',您好!您在文章《'.get_the_title($comment->comment_post_ID).'》发表的评论:</p><p style="background-color:#EFEFEF;padding:15px;margin:10px 0;font-size:14px;color:#354450;line-height:1.6em;font-weight:normal">'.nl2br(get_comment($parent_id)->comment_content).'</p><p style="font-size:14px;color:#354450;font-weight:400;margin:20px 0 0;padding:0">'.trim($comment->comment_author).'给您回复如下:</p><p style="background-color:#EFEFEF;padding:15px;margin:10px 0;font-size:14px;color:#354450;line-height:1.6em;font-weight:normal">'.nl2br($comment->comment_content).'</p><p style="font-size:14px;color:#354450;line-height:1.6em;font-weight:400;margin:20px 0;padding:0">您可以点击 <a style="text-decoration:none;color:#5692BC" href="'.htmlspecialchars(get_comment_link($parent_id,array("type" => "all"))).'" target="_blank">查看完整回复</a>,也欢迎您再次光临 <a style="text-decoration:none;color:#5692BC" href="'. get_option("home").'" target="_blank">'.get_option("blogname").'</a>。祝您天天开心!</p><p style="color:#999;font-size:12px;font-weight:400;margin:0;padding:10px 0 0;border-top:1px solid rgba(0,0,0,.08)">本邮件由博客评论系统自动发出,意在新评论通知。请勿直接回复,谢谢。</p></div>';
$message_plain = '您在『' . get_option("blogname") . '』的评论有新回复'."\r\n\r\n".trim(get_comment($parent_id)->comment_author).',您好!您在文章《'.get_the_title($comment->comment_post_ID).'》发表的评论:'."\r\n".nl2br(strip_tags(get_comment($parent_id)->comment_content))."\r\n\r\n".trim($comment->comment_author).'给您回复如下:'."\r\n".nl2br(strip_tags($comment->comment_content))."\r\n\r\n".'您可以通过下面链接查看完整回复,也欢迎再次光临'.get_option("blogname").'。祝您天天开心!'."\r\n".htmlspecialchars(get_comment_link($parent_id,array("type" => "all")))."\r\n\r\n".'本邮件由博客评论系统自动发出,意在新评论通知。请勿直接回复,谢谢。';
$message_html = str_replace("*uniqueID*", substr(md5(uniqid() . microtime()), 0, 5), convert_smilies($message_html));
global $phpmailer;
add_action('phpmailer_init', function (&$phpmailer) use ($message_html, $message_plain){
$phpmailer->isHTML(true);
$phpmailer->Body = $message_html;
$phpmailer->AltBody = $message_plain;
$phpmailer->CharSet = 'utf-8';
$phpmailer->Encoding = 'base64';
$phpmailer->MessageID = '<' . md5($message_plain.microtime().uniqid()).'@'.preg_replace("/^www\./", "", parse_url(esc_url( home_url('/') ), PHP_URL_HOST)).'>';
});
$headers = "From: ".get_option('blogname')." <".$wp_email.">" . "\n";
wp_mail($to, $subject, $message_html,$headers);
}

注意:可能需要根据实际主题代码进行修改才能正常使用。

不过,测试十分又怎样?该进垃圾邮件的还是会进,折腾罢了。

感谢 kn007 & LWL 两位博主。

除非注明,垃圾站文章均为网络收集,本文地址 https://cyhour.com/574/,转载时烦请以链接形式注明原始出处。
声明:我们不销售主机,任何VPS主机均有跑路风险且需定期备份,防止数据丢失。信息以实际为准,评测仅供参考不代表权威!
🍄:Netflix 奈飞 YouTube 合租

Gravatar 头像被墙及解决方案

Gravatar 头像真是一言难尽,时而正常时而抽风时而无法访问……就一个 Gravatar 头像,这有啥好强(现代通假字)的呢?(据说是被其它服务连累?) 解决办法 - 调用 ssl/cn 头像链接 历史解决办法:调用 ssl 头像链接——https还是没被墙的,而且速度还不错,直接调用这个最简单了。主题 functions.…
浏览: 149 标签:  ,  , 

Gridea 一个静态博客写作客户端 搭建免费静态博客

前几天折腾 Hugo,上手不难,建了个几乎零成本垃圾站,真香!Hugo 本地环境搭建比 Jekyll 简单,而 Gridea 比 Hugo 更简单,甚至,从功能上来说,Gridea 就是 Hugo GUI 版。 Gridea 简介 Gridea,一个静态博客写作客户端,小白也可以 GitHub Pages 搭建静态博客。开源、易用、强大。记录生…

斐讯 K3 路由器上车 简单折腾记录

一年前上过 K1、K2 的车,都安全下车,两个都高价专卖,目前还正常服役中。前阵子看博友 FROYO 双十一连上两趟车,忍不住上了 K3 的车,外加 K2。(2018.8 已翻车) 斐讯 K3 路由器上车 简单折腾记录 K3 上车前特意 Google 做了一下功课,看有没第三方固件可以刷,折腾方不方便,要不要拆机……结…
浏览: 85 标签:  ,  , 

斐讯 K3 路由器刷 OpenWRT LEDE 及固件收集下载

K3 上车已四个(多)月了,因为是三星闪存,梅林支持不好,折腾完就闲置。后来看网友说 K3 会漏油,觉得不可思议,就更加不想折腾它,只希望能顺利成功下车(K3)(2018.8 已翻车)。 斐讯 K3 OpenWrt LEDE 梅林固件大全:点击直达!!! 2019 斐讯K3 全版本 免降级、免拆机、免TTL 开启telnet …
浏览: 55 标签:  ,  , 
浏览: 38 标签:  ,  , 

Comments:29

  1. 常阳大佬和007大佬的WP阵营~

    2017.11.05 21:29 # 回复
    1楼
  2. 好文,收了

    2017.11.05 22:15 # 回复
    2楼
  3. 看不懂啊 看不懂 ……

    2017.11.05 22:48 # 回复
    3楼
  4. 懒得折腾了 凑合着用吧

    2017.11.05 23:25 # 回复
    4楼
  5. 恭喜下。
    不过这扒皮,希望不会太多人撞衫到时。。。我是根据seven定制的,比较简洁。
    感觉我的邮件模版,主题模版被扒了很多。

    2017.11.06 07:19 # 回复
    5楼
  6. 垃圾站-Klose
    Klose

    只要添加上面的代码就可以用了吗?

    2017.11.06 08:38 # 回复
    6楼
  7. 感谢分享

    2017.11.06 09:22 # 回复
    7楼

发表留言

Vultr 送$100,搬瓦工年付最低$49,优惠码 BWH3HYATVBJW,更多推荐VPS信息