备忘,记录折腾网站邮件回复的经过

三月五号的时候,问知更鸟要了最新版本的主题文件包,删除原来的,上传新的后,邮件回复就出了问题。镜缘轩知道的一个原因是之前主题是设置了Sendloud邮件回复的,但是不应该出现系统回复都没有啊。

先给服务器装上sendmail,系统还是发不出邮件来,然后再主题文件inc.php里配置好Sendloud的设置,具体设置方法可以参考张戈的文章,《WordPress集成SendCloud邮件代发,规避SMTP泄漏网站主机真实IP的风险》 但是设置完了以后还是发不出邮件来,由于身体也不舒服,索性不管了。

前两天和张波博客博主互动的时候,提到这一点,张波认为,邮件也是互动中不可缺少的一环,镜缘轩觉得还是有道理的,正好趁着下午没事的时间,折腾一下。

由于系统发不出邮件,索性给博客在装一个smtp的插件来发邮件,装好后,系统邮件可以发送了,重启了一下服务器,神奇的事情发生了,只见在垃圾邮箱里冒出来几十封的由服务器邮件系统发出的邮件,还都是同一时间发出的,再测试一下找回密码的功能,竟然会收到两封邮件,于是把smpt插件禁用,服务器系统发送邮件竟然正常了。

测试了下留言回复的功能,发现还是没有调用Sendloud,于是回去看看代码,发现是由于没有调用邮件模板导致的,所以添加上模板后,经过测试,回复留言已经正常了。

为了以后升级主题方便,这次把这件事情以及所需要添加的代码记录下来,以免忘记了操作的步骤。

  1. //移除原有的邮件通知动作钩子(一般都是用的comment_mail_notify这个函数,自己注意辨别)  
  2. remove_action('comment_post', 'comment_mail_notify');  
  3. /** 
  4. ** WordPress集成Sendloud邮件代发函数 
  5. ** 原创地址:https://zhang.ge/5045.html 
  6. ** Ps:转载不保留出处 and 篡改版权的都木有小JJ。 
  7. **/  
  8. function SendCloud_mail($from,$fromname,$to,$subject,$message,$template) {  
  9.     $api_user = "12333333333"//注意保留英文双引号!  
  10.     $api_key = "111111111111";  
  11.     $ch = curl_init();  
  12.     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);  
  13.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);  
  14.     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');  
  15.     curl_setopt($ch, CURLOPT_URL, 'http://sendcloud.sohu.com/webapi/mail.send_template.json');  
  16.     $substitution_vars  = json_encode(array('to' => array($to),'sub' => $message));  
  17.     $data = array(  
  18.         'api_user' => $api_user,  
  19.         'api_key' => $api_key,  
  20.         'from' => $from,  
  21.         'fromname' => $fromname,  
  22.         'template_invoke_name'=> $template,  
  23.         'subject' => $subject,  
  24.         'substitution_vars'=> $substitution_vars  
  25.         );  
  26.     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
  27.     $result = curl_exec($ch);  
  28.     if($result === false) {  
  29.         echo curl_error($ch);  
  30.     }  
  31.     curl_close($ch);  
  32.     return $result;  
  33. }  
  34. //下面是修改版的WordPress发邮件代码(支持嵌套评论邮件)  
  35. //适用于Sendloud,你们看张戈多厚道,任何时候都保留出处,不像某些小人!  
  36.    
  37. /* 邮件通知 by Qiqiboy */  
  38. function comment_SendCloudMail_notify($comment_id) {  
  39.      $comment = get_comment($comment_id);//根据id获取这条评论相关数据  
  40.      $comment_approved=$comment->comment_approved;  
  41.      if ($comment_approved != 1) { return; }    
  42.      $content=$comment->comment_content;  
  43.      //对评论内容进行匹配  
  44.      $match_count=preg_match_all('/<a href="#comment-([0-9]+)?" rel="nofollow">/si',$content,$matchs);  
  45.      if($match_count>0){ //如果匹配到了  
  46.          foreach($matchs[1] as $parent_id){//对每个子匹配都进行邮件发送操作  
  47.              SimPaled_send_email($parent_id,$comment);  
  48.          }  
  49.      } elseif ($comment->comment_parent!='0'){//以防万一,有人故意删了@回复,还可以通过查找父级评论id来确定邮件发送对象  
  50.          $parent_id=$comment->comment_parent;  
  51.          SimPaled_send_email($parent_id,$comment);  
  52.      } else return;  
  53.  }  
  54. add_action('comment_post', 'comment_SendCloudMail_notify');  
  55.    
  56. function SimPaled_send_email($parent_id,$comment){//发送邮件的函数 by Qiqiboy.com  
  57.      $admin_email = get_bloginfo ('admin_email');//管理员邮箱  
  58.      $parent_comment=get_comment($parent_id);//获取被回复人(或叫父级评论)相关信息  
  59.      $author_email=$comment->comment_author_email;//评论人邮箱  
  60.      $to = trim($parent_comment->comment_author_email);//被回复人邮箱  
  61.      $spam_confirmed = $comment->comment_approved;  
  62.      if ($spam_confirmed != 'spam' && $to != $admin_email && $to != $author_email) {  
  63.          $wp_email = 'no-reply@' . preg_replace('#^www\.#', ''strtolower($_SERVER['SERVER_NAME'])); // e-mail 發出點, no-reply 可改為可用的 e-mail.  
  64.          $subject = '您在 [' . get_option("blogname") . '] 的留言有了新的回复!';  
  65.          $fromname = get_option('blogname');  
  66.          $message = array(  
  67.                 "%conent_title%"=>array(get_the_title($comment->comment_post_ID)),  
  68.                 "%comment_content1%"=>array(trim(get_comment($parent_id)->comment_content)),  
  69.                 "%comment_content2%"=>array(trim($comment->comment_content)),  
  70.                 "%comment_author1%"=>array(trim(get_comment($parent_id)->comment_author)),  
  71.                 "%comment_author2%"=>array(trim($comment->comment_author)),  
  72.                 "%comment_link%"=>array(htmlspecialchars(get_comment_link($parent_id,array("type" => "all")))),  
  73.                 "%blogname%"=>array(get_option('blogname')),  
  74.                 "%description%"=>array(get_bloginfo('description')),  
  75.                 "%home_url%"=>array(get_option('home'))  
  76.                 );  
  77.         if$to != '' && is_email($to)){  
  78.            SendCloud_mail( $wp_email$fromname$to$subject$message, '自己的模板');  
  79.         }  
  80.      }  
  81.  }  
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
12 条回复 A 作者 M 管理员
  1. 就将以上这篇代码添加到主题的功能文件当中就行了???

    • 当然是不行的了,添加前要设置好Sendloud,详细的方法看张戈的博客,一步一步照做,很容易的

  2. 邮件回复博客建立之前就必须弄好~~这就是个人博客比第三方博客好的地方了

    • 以前都是正常的,升级主题后不正常了,昨天有时间才给又弄好了

  3. 是呀,回复评论邮件功能还是非常实用的,增强了互动。
    你的博客用的独立服务器?

    • 嗯,用的景安的,做活动的时候买的,一年200多块钱,和虚拟主机差不多的价格

    • 想用国内的,但是备案太麻烦。不过我现在用的香港的空间速度 也是很不错的。

    • 国内的可以套个免费的CDN,香港的空间速度其实不慢,就是不能用免费cdn,再说org现在也不给备案了吧?

    • 200的价格好便宜,虚拟主机都比这个贵很多很多

    • 活动的时候买的,估计续费就没有这么便宜了

  4. 邮件提醒,增加互动性挺好

    • 是的

欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论