我有一小段代码用于发送可以处理HTML代码的电子邮件。该消息在hotmail中完美显示,但在gmail中,所有html代码都被视为文本并显示。
以下是代码格式: -
$headers = "From: $from \r\n <$email_return>";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
ob_get_contents(); ?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
<?php echo $email_message;?>
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit
<div style="text-align:left;"><img src="sitelogo.png" height="50px;"></div>
<br>
Dear <?php echo $name;?>,
<br><br>
Thanks!
<br><br><br>
<strong><i><?php echo $email_signature;?></i></strong><br><br>
--PHP-alt-<?php echo $random_hash; ?>--
<?php
$message = ob_get_clean();
$mail_sent = mail($to, $subject, $message, $headers);
echo $mail_sent ? "OK!!" : "not OK!!";
}
?>
我想知道我是否可以对php代码做任何正确显示,否则我可能不得不放弃html格式。谢谢。
答案 0 :(得分:0)
您是否尝试过quoted-printable
而不是7bit
?
此外,没有标准的HTML标记,您开始使用div
。
还要先尝试放置text / html内容。
<强>更新强>
通常,组成多部分/替代实体的用户代理 应该按照偏好的顺序放置身体部位 是,最后的格式是最后一个。对于花哨的文本,发送用户 代理商应该把最简单的格式放在第一位,最丰富的格式 持续。接收用户代理应选择并显示最后一种格式 他们有能力展示。在其中一个的情况下 替代品本身是“multipart”类型,包含无法识别 子部分,用户代理可以选择显示该替代, 较早的替代方案,或两者兼而有之。
注意:从实施者的角度来看,它似乎更合理 扭转这种排序,最后有最简洁的选择。 然而,首先放置最简洁的替代品是最友好的 使用a查看mutlipart / alternative实体时的可能选项 不符合MIME的邮件阅读器。虽然这种方法确实强加了一些 合规邮件阅读器的负担,与旧邮件的互操作性 在这种情况下,读者被认为更重要。
自: http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
看起来您还没有在标头中声明MIME版本。例如。
MIME-Version: 1.0
答案 1 :(得分:0)
我有类似的问题。这不是Gmail或PHP的问题。在我的例子中,问题是当PHP从我的PHP源文件生成电子邮件消息时,如上所述,它以某种方式解释了Gmail不喜欢的行尾,也许它发送的是LF而不是CRLF,有点像这样。我没有看细节。我所知道的是,鉴于我的电子邮件的默认值是CRLF的行尾,我使用<?php echo "\r\n"; ?>
明确写了所有行的结尾,而不是依赖文件中的空行,然后Gmail正确解释了信息。问题很可能是我用来编写PHP源文件的编辑器所特有的。就我而言,它是Notepad ++。也许它没有正确配置。现在,为了安全起见,我总是明确地在电子邮件中输入行尾,至少对于MTA和MUA必须理解的部分,Content-Type,边界并不重要。等等。