纯文本/ HTML电子邮件在mac邮件客户端中不起作用

时间:2008-12-08 09:46:32

标签: php email

以下代码是我正在使用的代码。它在雷鸟中运行良好,但在mac邮件客户端却没有(我假设微软提供的任何东西。我目前无法访问它来测试它)。就像我知道各种邮件客户端的特性一样,我对此感到茫然!这是相当自我解释,但我试图发送纯文本和HTML电子邮件,以增加读者群。任何帮助将不胜感激。

修改

我应该澄清一下,内容会被发送,但是在thunderbird中它会正确地显示消息,但是在mac mail客户端中,你可以从第一个PHP-alt到最后一个PHP获得整个内容

<?php
//define the receiver of the email
$to = 'youraddress@example.com';
//define the subject of the email
$subject = 'Test HTML email';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"";
//define the body of the message.
ob_start(); //Turn on output buffering
?>
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>

--PHP-alt-<?php echo $random_hash; ?>--
<?
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed";
?>

2 个答案:

答案 0 :(得分:3)

不要尝试滚动自己的邮件,而是尝试例如PHPMailer。它对多部件/替代品有很好的支持。集成它比滚动自己的解决方案要容易得多。我一直在那里 - 在无休止地解决奇怪的MIME问题之后,我放弃了手工制作的邮件,转而使用,并在我放弃的时候专注于其他事情。

换句话说,不要重新发明轮子。虽然自己做这件事可能是一个很好的挑战,你会在这个过程中学到很多东西,如果你只是想让它发挥作用,这些人已经为你处理了复杂性。

答案 1 :(得分:0)

您没有正确使用输出缓冲 - 请参阅ob_end_clean的手册页以查看它未返回捕获的输出,您需要ob_get_contents

$message =ob_get_contents();
ob_end_clean();