为什么HTML电子邮件的一部分在电子邮件客户端中显示为文本


Why is part of the HTML email appearing as text in email client?

我正在尝试使用Codeigniter的电子邮件类发送HTML电子邮件。我就是这样做的:

    $config = Array(
        'protocol' => 'smtp',
        'smtp_host' => 'ssl://smtp.googlemail.com',
        'smtp_port' => 465,
        'smtp_user' => 'a@a.com',
        'smtp_pass' => 'password',
        'mailtype'  => 'html', 
        'charset'   => 'iso-8859-1'
    );
    
    $this->load->library('email', $config);
    $this->email->from('b@b.com', 'Me');
    $this->email->to($email); 
    $this->email->subject($subject);
    $this->email->message($html);
    $this->email->set_newline("'r'n"); 
    if($this->email->send()){
        return true;   
    }else{    
        return false;
    }

然而,当我在Gmail或outlook中查看电子邮件时,我会看到一堆HTML以文本形式出现在电子邮件的顶部,而电子邮件的其余部分则正常显示。

这里是我正在发送的HTML,它是我找到的一个模板,可以用来测试。第1行至第19行显示为普通文本,不进行渲染。

这就是电子邮件的外观。

为什么会出现这种情况?

作为问题评论中我们对话的总结,问题似乎是$html变量的内容。变量包含实体编码的HTML。通过html_entity_decode运行它解决了问题。

未呈现的HTML代码似乎是模板的头。也许Gmail将只显示标签body中的代码,因为Gmail是一个网络应用程序,所以它显示在已经包含标题和正文(<html><head><body>)的网页中。