我遇到了一个很奇怪的问题,我有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 字符集,但仍然遇到此问题。
问候绍艾布
您发送电子邮件的速度太快,这可能是由于spam/unwantd
电子邮件使用sleep(4)
在下一个"邮件"中创建4 sec delay
的结果。
问题出在 mime 类型上,它需要再次编码。基本上,我发送的消息没有像我那样用UTF-8编码。这次我用Mail_mimePart而不是Mail_mime,它有效治疗。
这个例子非常非常有帮助
---ahttp://tiger-fish.com/comment/reply/133---
Mail_mimePart的一些参数说明可以在下面的链接中找到
ahttp://pear.php.net/manual/en/package.mail.mail-mimepart.mail-mimepart.php---
如何使用Mail_mimePart附加附件。
ahttp://pear.php.net/manual/en/package.mail.mail-mimepart.addsubpart.php---
希望对您有所帮助。