放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

完美解决BAE发邮件HTML不被解析

BAE上面的WordPress发邮件如果出现html代码,说明你的发送代码有一处需要修改。根据BaiduBcms的文档,如需发送html格式邮件,请在发送的文本前加上 <!–HTML–> 这个标记。

需要修改你的主题使用的发送邮件的函数,一般是comment_mail_notify,找到$message变量,往单引号里面加入一个<!–HTML–>

####################################################################################################
#
#   评论回复邮件发送 不是自己写的
#
####################################################################################################
   
function comment_mail_notify($comment_id) {
  $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 = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));//发件人e-mail地址
    $to = trim(get_comment($parent_id)->comment_author_email);
    $subject = '您在['.get_option("blogname").']的留言有了回复';
    $message = '
    <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;">
      <p>'.trim(get_comment($parent_id)->comment_author).', 您好!</p>
      <p>这是您在《'.get_the_title($comment->comment_post_ID).'》中的留言:<br />'
       .trim(get_comment($parent_id)->comment_content).'</p>
      <p>以下是 '.trim($comment->comment_author).' 给您的回复:<br />'
       .trim($comment->comment_content).'<br /></p>
      <p>您可以<a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">点击这里查看回复的完整内容.</a></p>
      <p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p>
      <p>此邮件为系统自动发出!</p>
    </div>';
    $message = convert_smilies($message);
    $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 );
    //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing
  }
}
if(config('comment_reply_mail')){
    add_action('comment_post', 'comment_mail_notify');
}

要修改的地方在下图中红框框里表明:

后来hankcs一度发现还是没有解析成功,再后来Gimhoy测试成功,我回头看了看自己的代码,觉得有可能是空格和换行搞得鬼。于是把这句写成一行:

$message = '<!--HTML--><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;"><p>'.trim(get_comment($parent_id)->comment_author).', 您好!</p><p>这是您在《'.get_the_title($comment->comment_post_ID).'》中的留言:<br />'.trim(get_comment($parent_id)->comment_content).'</p><p>以下是 '.trim($comment->comment_author).' 给您的回复:<br />'.trim($comment->comment_content).'<br /></p><p>您可以<a href="' . htmlspecialchars(get_comment_link($parent_id)) . '">点击这里查看回复的完整内容.</a></p><p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p><p>此邮件为系统自动发出!</p></div>';

最后测试成功了:

最后总结一下,罪魁祸首是换行和空格,代码为了写得好看换了行空了格,我把它们写到一行里面就解析出来啦 /04

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » 完美解决BAE发邮件HTML不被解析

评论 9

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #5

    查出问题了,罪魁祸首是换行和空格,代码为了写得好看换了行空了格,我把它们写到一行里面就解析出来啦 /04

    hankcs11年前 (2013-04-12)回复
  2. #4

    的确成功了

    hankcs11年前 (2013-04-12)回复
  3. #3

    我测试了下我自己的,可以用啊。。QQ邮箱和Gmail都显示正常。

    Gimhoy11年前 (2013-04-09)回复
    • 查出问题了,罪魁祸首是换行和空格,代码为了写得好看换了行空了格,我把它们写到一行里面就解析出来了 /04

      hankcs11年前 (2013-04-12)回复
      • 表示我也用换行了啊~不过BCMS抽风挺正常。。

        Gimhoy11年前 (2013-04-12)回复
        • 那可能真的是百度抽风啊 /12

          hankcs11年前 (2013-04-12)回复
  4. #2

    只好删掉了所有html代码了

    hankcs11年前 (2013-04-03)回复
  5. #1

    不行 /05

    hankcs11年前 (2013-04-03)回复

我的作品

HanLP自然语言处理包《自然语言处理入门》