Почта PHP UTF8 искажается в почтовом приложении iPhone - PullRequest
6 голосов
/ 04 марта 2011

Я использую функцию внутренней почты php для отправки почты, я завернул ее в функцию, которая выполняет UTF8 процесс, я нашел его в сети.

все работает, я отправил электронное письмо с кодом в GMAILи на мой сервер EXCHANGE, как в GMAIL, так и в моем клиенте Outlook на моем ПК, я получаю сообщение точно.

Мой iPhone также подключен к учетным записям Exchange и GMAIL, поэтому я получаю оба сообщения на своем iPhone.iPhone правильно получает сообщение GMAIL, но учетная запись EXCHANGE показывает сообщение с искаженным тарабарским текстом, где нет латинских символов.

В приведенном ниже примере отправляются ивритские символы в теме и в теле.На моем iPhone тема правильно воспринимается на иврите, но еврейские части в теле сообщения искажены.

Кто-нибудь может это прокомментировать?может быть, попробовать на вашей собственной настройке?

спасибо,

<?php


function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') { 
$header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' .   "\r\n"; 
mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header);  
}

$mymessage = "Hello <BR>"; 
$mymessage.= "Received: now<BR/><BR/>";
$mymessage.= "details: שלום שלום<BR/><BR/>";

mail_utf8 ("XXX@gmail.com,XXX@exchangeServer.com", "שלום", $mymessage, "my_mail", "mailer@phpmail.com");


?>

Ответы [ 3 ]

1 голос
/ 04 марта 2011

Поскольку сообщение правильно получено на вашу учетную запись gmail через iPhone, это, вероятно, ошибка / неверная конфигурация на сервере Exchange или в синхронизации iPhone Exchange.

Лучшее, что можно сделать, - это кодировать base64.не только тема, но и все сообщение: символы, используемые base64, почти всегда передаются правильно, поскольку коды символов одинаковы в US-ASCII, ISO-8859-x и UTF-8.Все современные почтовые клиенты могут декодировать base64, но это увеличивает размер вашего сообщения примерно на 33%.

 function mail_utf8($to, $subject = '(No subject)', $message = '', $header = '') { 
      $header_ = 'MIME-Version: 1.0' . "\r\n" .
                 'Content-type: text/plain; charset=UTF-8' .   "\r\n" .
                 'Content-Transfer-Encoding: base64' . "\r\n"; 
      mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', base64_encode($message), $header_ . $header);  
 }
1 голос
/ 27 марта 2014

У меня такая же проблема с iPhone и Exchange, я решил свою проблему с помощью Content-Transfer-Encoding: quoted-printable\r\n и quoted_printable_encode() попробуйте свой код следующим образом:

function mail_utf8($to, $subject = '(No subject)', $message = '', $from ='') { 
  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  $headers .= "Content-Transfer-Encoding: quoted-printable\r\n";
  $headers .= "From: $from\r\n";
  mail($to, $subject, $message, $headers);  
}
$mymessage = "Hello <BR>"; 
$mymessage.= "Received: now<BR/><BR/>";
$mymessage.= "details: שלום שלום<BR/><BR/>";
$mymessage = quoted_printable_encode($mymessage);

mail_utf8 ("XXX@gmail.com,XXX@exchangeServer.com", "שלום", $mymessage, "mailer@phpmail.com");
0 голосов
/ 04 марта 2011

Простой ответ - используйте Swift Mailer .Магия заголовка в письмах непредсказуема.Я также пытался поиграть с ним долгое время, но рано или поздно кто-то сообщил, что на его настройке (почтовый провайдер или приложение) текст искажен или что-то еще (я отправляю много писем вчешский, поэтому работа с UTF является приоритетом).

Используйте Swift Mailer и сэкономьте себе нервы.Это быстро для установки и изучения и прекрасно работает.

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