0

我面临着一个非常奇怪的问题,我有一个 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 字符集,但仍然遇到此问题。

问候绍伊布

4

2 回答 2

0

很可能您发送电子邮件的速度太快,这可能会在spam/unwantd使用电子邮件sleep(4)创建4 sec delay下一个“邮件”的结果中发生。

于 2013-09-09T10:13:13.317 回答
0

问题在于 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---

希望能帮助到你。

于 2013-09-17T16:59:26.970 回答