PHP HTML 电子邮件使用 Pear HTML 表和 Pear Email


PHP Html Email using Pear HTML Table and Pear Email

我遇到了一个很奇怪的问题,我有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---

希望对您有所帮助。