0

我有一小段代码用于发送可以满足 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 格式。谢谢你。

4

3 回答 3

0

你试过quoted-printable代替7bit吗?

此外,没有标准的 HTML 标签,并且您从div.

也尝试先放置 text/html 内容。

更新

一般来说,组成多部分/替代实体的用户代理应该将正文部分按优先顺序递增,即优先格式最后。对于花哨的文本,发送用户代理应该把最简单的格式放在第一位,最丰富的格式放在最后。接收用户代理应该选择并显示他们能够显示的最后一种格式。在其中一个替代方案本身是“多部分”类型并且包含无法识别的子部分的情况下,用户代理可以选择显示该替代方案、较早的替代方案或两者兼而有之。

注意:从实现者的角度来看,颠倒这个顺序似乎更明智,最后有最简单的替代方案。然而,当使用非 MIME 兼容的邮件阅读器查看多部分/替代实体时,将最简单的替代方案放在首位是最友好的选择。虽然这种方法确实给兼容的邮件阅读器带来了一些负担,但在这种情况下,与旧邮件阅读器的互操作性被认为更为重要。

来自: http ://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

看起来您没有在标题中声明 MIME 版本。例如。 MIME-Version: 1.0

于 2013-04-16T05:12:12.470 回答
0

我有一个类似的问题。这不是 Gmail 或 PHP 的真正问题。就我而言,问题是当 PHP 从我的 PHP 源文件生成电子邮件时,就像上面的那样,它以某种 Gmail 不喜欢的方式解释了行尾,也许它发送了 LF 而不是 CRLF,类似的东西。我没有看细节。我所知道的是,鉴于我的电子邮件中的默认值是 CRLF 作为行尾,我使用明确地写了所有行尾<?php echo "\r\n"; ?>,而不是依赖文件中的空行,然后 Gmail 会正确解释邮件。这个问题很可能是我用来编写 PHP 源文件的编辑器所特有的。就我而言,它是记事本++。也许它没有正确配置。没关系,现在,为了安全起见,我总是在我的电子邮件中明确输入行尾,至少对于 MTA 和 MUA 必须理解的部分,Content-Type,边界, ETC。

于 2014-12-26T08:32:54.553 回答
0

您可以尝试以下步骤来修复它:(为我工作)

Hold down the Shift key and click the Reload button
Press "Ctrl + Shift + R" (Windows,Linux)
Press "Command + Shift + R" (Mac)
于 2022-02-28T07:28:22.377 回答