我面临着一个非常奇怪的问题,我有一个 php 脚本,它向包含 HTML 表(带有数据)和相同数据的 CSV 附件的用户列表发送一封电子邮件。问题是当该脚本发送超过 10 封电子邮件时,在我们收到的一些电子邮件中
--=_f3be233a9b22e88524e1539166c49be0 内容传输编码:引用的可打印内容类型:文本/html;字符集=UTF-8
在电子邮件正文和 HTML 表格中也丢失了格式,但是该电子邮件中的 CSV 数据绝对没问题。
基本上该脚本的目的是根据用户订阅信息(数据库表)挑选数据并在清晨将其发送给订阅用户。每天晚上,数据库表都会使用新数据进行更新,这些数据由 PHP 脚本获取并通过电子邮件发送。此外,PHP 脚本由 Windows 计划任务触发。下面是应用程序的代码。
if($ix>0)
{
while(odbc_fetch_row($subRes2))
{
$s_email=odbc_result($subRes2, 1);
//echo $s_email;
$from = "Sender <alerts@xxx.com>";
$to = "$s_email";
$subject = "Information_DB:" . $arrayE . " Restored on: " . "-";
$host = "xxxinternal.xxxx.com";
$port = "25";
//disabled the username and password because currently sending unauthenticated email.
// $username = ""; //<> give errors
//$password = "";
//add the email headers 29082013 1008 - SMS
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject,
'Content-Type' => 'text/html; charset=UTF-8');
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => false));
//'username' => $username,
//'password' => $password));
$subject = "Results from query";
$crlf = "\n";
$mime_params = array(
'text_encoding' => '7bit',
'text_charset' => 'UTF-8',
'html_charset' => 'UTF-8',
'head_charset' => 'UTF-8'
);
// Creating the Mime message
$mime = new Mail_mime($crlf);
// Setting the body of the email
//$mime->setTXTBody($body);
$mime->setHTMLBody($body);
$file='./wamp/www/' . $csv_filename;
$mime->addAttachment($csv_filename,'application/octet-stream');
$body = $mime->get($mime_params);
$headers = $mime->headers($headers);
// Sending the email
// $mail =& Mail::factory('mail');
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
// echo "<script>window.close()</script>";
}
else {
echo("<p>Message successfully sent!</p>");
}
}}}
else
{
$from = "Sender <alert@xxx.com>";
$to = "$s_email";
$subject = "Information_DB:" . $arrayE . " Restored on: " . "-";
//$host = "ssl://smtp.gmail.com";
$host = "xxxinternal.xxxx.com";
$port = "25";
//disabled the username and password because currently sending unauthenticated email.
// $username = ""; //<> give errors
//$password = "";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject,
'Content-Type' => 'text/html; charset=UTF-8');
?>
不幸的是,当我们测试时,我看不到这个问题。但是当它使用 UAT 时,很多用户都遇到了这个问题,而且它似乎与数据库一致。例如,如果用户 A 订阅了西班牙和俄罗斯数据,那么他们始终会遇到俄罗斯数据电子邮件的问题(包含电子邮件中提到的标题),但是西班牙数据电子邮件很好。在现场,它可能每天发送大约 100 封电子邮件。
如果你们中的任何人指出出了什么问题,我将不胜感激,因为我正在电子邮件 mime 设置中设置 UTF-8 字符集,但仍然遇到此问题。
问候绍伊布