我搜索了很多,但找不到任何解决方案。 在我的代码更改几个小时后,我尝试了从php.net的例子,它的行为相同。
如果我将它发送到我的Gmail地址,一切都很好, 如果我将它发送到另一台服务器,它不会将其呈现为HTML。 我尝试了大约8台服务器,其中4台遇到了这个问题
这是代码(php示例):
// subject
$subject = 'Birthday Reminders for August';
// message
$message = '
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
// Mail it
mail($to, $subject, $message, $headers);
?>
这是来自gmail的“show original”(gmail只是客户端,邮件来自php服务器),消息未正确显示 - html是raw:
Delivered-To: XXX
Received: by 10.220.35.74 with SMTP id o10csp285028vcd;
Sun, 9 Dec 2012 03:18:35 -0800 (PST)
Received: by 10.220.238.139 with SMTP id ks11mr6865773vcb.49.1355051914996;
Sun, 09 Dec 2012 03:18:34 -0800 (PST)
Received-SPF: softfail (google.com: best guess record for domain of transitioning unknown does not designate 82.80.232.249 as permitted sender) client-ip=82.80.232.249;
Received: by 10.230.67.134 with POP3 id r6mf4415353vbi.4;
Sun, 09 Dec 2012 03:18:34 -0800 (PST)
X-Gmail-Fetch-Info: gideon@example.com 5 mail.example.com 110 gideon@example.com
Received: from [82.80.232.249] by mail.example.com (ArGoSoft Mail Server .NET v.1.0.8.4) with ESMTP (EHLO web9.wishosting.net)
for <gideon@example.com>; Sun, 09 Dec 2012 13:18:02 +0200
Received: by web9.wishosting.net (Postfix, from userid 1168)
id C82D03EE2EC; Sun, 9 Dec 2012 13:18:23 +0200 (IST)
To: gideon@example.com, wez@example.com
Subject: Birthday Reminders for August
X-PHP-Script: example.com/lp/mailtest.php for 89.139.28.204
MIME-Version: 1.0
Date: Sun, 09 Dec 2012 13:18:02 +0200
Message-ID: <x0otq4xc1dcboohp09122012011802@EAWEB1>
SPF-Received: none
X-FromIP: 82.80.232.249
From: gideon@example.com
Content-type: text/html; charset=iso-8859-1
To: Mary <mary@example.com>, Kelly <kelly@example.com>
From: Birthday Reminder <birthday@example.com>
Cc: birthdayarchive@example.com
Message-Id: <20121209111823.C82D03EE2EC@web9.wishosting.net>
Date: Sun, 9 Dec 2012 13:18:23 +0200 (IST)
<html>
<head>
<title>Birthday Reminders for August</title>
</head>
<body>
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>
</body>
</html>
答案 0 :(得分:4)
伊万的评论是正确的!
尝试以下使用phpmailer lib的示例。
<?php
//phpmailer lib
require_once 'class.phpmailer.php';
$mail = new PHPMailer(true);
try {
$mail->AddAddress('mary@example.com', 'Mary');
$mail->AddAddress('kelly@example.com', 'Kelly');
$mail->SetFrom('birthday@example.com', 'Birthday Reminder');
$mail->AddReplyTo('no-reply@example.com', 'No-reply');
$mail->Subject = 'Birthday Reminders for August';
$mail->AltBody = 'Here are the birthdays upcoming in August!\nPerson:Joe BirthDay:3rd Aug 1970\nPerson:Sally BirthDay:17th Aug 1973\n';
$mail->MsgHTML('
<p>Here are the birthdays upcoming in August!</p>
<table>
<tr>
<th>Person</th><th>Day</th><th>Month</th><th>Year</th>
</tr>
<tr>
<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>
</tr>
<tr>
<td>Sally</td><td>17th</td><td>August</td><td>1973</td>
</tr>
</table>'
);
$mail->Send();
echo "Message Sent OK<p></p>\n";
} catch (phpmailerException $e) {
echo $e->errorMessage();
} catch (Exception $e) {
echo $e->getMessage();
}
?>
可以从https://code.google.com/a/apache-extras.org/p/phpmailer/downloads/list
下载PHPMailer位于https://code.google.com/a/apache-extras.org/p/phpmailer/wiki/ExamplesPage
的样本答案 1 :(得分:2)
这取决于将显示消息的电子邮件阅读器。
Gmail和大多数现代电子邮件客户端(如MS Outlook,Thunderbird,Evolution ...)将呈现html,如果它有html内容,一些较旧的读者会将其呈现为纯文本,因为它们无法呈现html(如松鼠或部落)。
为了在任何读者中正确呈现电子邮件,您必须在电子邮件正文中放入纯文本和html版本的电子邮件。
最好的方法是在php 中使用 PHPmailer,SwiftMail和其他包装器进行电子邮件,但如果你真的希望自己做try this。
另外,请注意,有些读者在显示各种html元素(如div和css规则)时会遇到问题。 最好坚持使用标签和css MS Outlook可以呈现的内容。
答案 2 :(得分:0)
尝试设置MIME边界
// generate a random string to be used as the boundary marker
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
// now we'll build the message headers
$headers = "From: $from\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";
// here, we'll start the message body.
// this is the text that will be displayed
// in the e-mail
$message="This is an example";
// next, we'll build the invisible portion of the message body
// note that we insert two dashes in front of the MIME boundary
// when we use it
$message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";