Имея некоторые проблемы с отправкой правильно отформатированного HTML-письма из скрипта PHP. Я запускаю PHP 5.3.0 и Apache 2.2.11 на Windows XP Professional.
Результат выглядит следующим образом:
Резюме агента для поддержки во вторник 20 апреля 2010 г. = 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
Очень часто неправильно вводить текстовые данные с помощью набора символов ISO-8859-1, хотя данные действительно закодированы в Windows-1252. В Windows-1252 коды между 0x80 и 0x9F используются для букв и знаков препинания, тогда как они являются управляющими кодами в ISO-8859-1. Многие веб-браузеры и почтовые клиенты будут интерпретировать коды управления 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!"); }
Проблема в том, что я использую буферизацию вывода?
Проблема в том, что вам нужен следующий заголовок:
Content-Transfer-Encoding: quoted-printable