从PHP脚本发送格式正确的HTML电子邮件时遇到一些问题。我在Windows XP Professional上运行PHP 5.3.0和Apache 2.2.11。
输出如下:
2010年4月20日星期二的代理人支持摘要= 20 分机。名称时间量
137代理人姓名01:27:25 1
138 = 09 00:00:00 0
139 = 09 00:00:00 0
你看到那里的= 20和= 09?如果您查看HTML,您还会看到=符号变为= 3D。我认为这是一个字符编码问题,因为我在维基百科上阅读了以下内容:
ISO-8859-1和Windows-1252混淆
使用charset标签ISO-8859-1错误标记文本数据是很常见的,即使数据实际上是Windows-1252编码。在Windows-1252中,0x80和0x9F之间的代码用于字母和标点符号,而它们是ISO-8859-1中的控制代码。许多Web浏览器和电子邮件客户端会将ISO-8859-1控制代码解释为Windows-1252字符,以便适应这种错误标记,但这不是标准行为,应注意避免在ISO-8859-1中生成这些字符标签内容。
这看起来像问题,但我不知道如何修复。我的代码如下所示:
ob_start();
report_queue_summary($yesterday,$yesterday,$first_extension,$last_extension,$queue);
$body_report = ob_get_contents();
ob_end_clean();
$body_footer = "This is an automatically generated e-mail.";
$message = new Mail_mime();
$html = $body_header.$body_report.$body_footer;
$message->setHTMLBody($html);
$body = $message->get();
$extraheaders = array("From"=>"***redacted***","To"=>$recipient, "Subject"=>"Agent Summary for $yesterday [$queue]", "Content-type"=>"text/html; charset=iso-8859-1");
$headers = $message->headers($extraheaders);
# setup e-mail;
$host = "*********";
$port = "26";
$username = "*****";
$password = "*****";
# Send e-mail
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($recipient, $extraheaders, $body);
if (PEAR::isError($mail)) {
echo("" . $mail->getMessage() . "");
} else {
echo("Message successfully sent!");
}
我正在使用输出缓冲的问题吗?
答案 0 :(得分:2)
问题是您需要以下标题:
Content-Transfer-Encoding: quoted-printable