Проблема с кодировкой символов на электронной почте, отправленной через PHP? - PullRequest
1 голос
/ 22 апреля 2010

Возникли проблемы с отправкой правильно отформатированного электронного письма в формате HTML из сценария PHP. Я использую PHP 5.3.0 и Apache 2.2.11 в Windows XP Professional.

Вывод выглядит так:

Сводка агента по поддержке во вторник, 20 апреля 2010 г. = 20 Ext. Название Время Объем
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!");
 } 

Проблема в том, что я использую буферизацию вывода?

1 Ответ

2 голосов
/ 22 апреля 2010

Проблема в том, что вам нужен следующий заголовок:

Content-Transfer-Encoding: quoted-printable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...