Когда я пытаюсь отправить электронное письмо с кодировкой HTML из PHP, если строка темы содержит специальные символы, такие как "Here's the information you requested", PHP кодирует его для чтения "Here's the information you requested.".
Как я могу это исправить?
Вот как выглядит код с использованием PHP mail ():
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: ' . $mod_params['name'] . '<' . $mod_params['email'] . '>' . "\r\n";
$headers .= 'From: <[email protected]>' . "\r\n";
$email_to = $mod_params['email'];
$email_sub = "Here's the Information You Requested";
$body = html_entity_decode("<html><body>" . $email_html_body . "</body></html>");
mail($email_to,$email_sub,$body,$headers);
Это дает ту же ошибку, что и при запуске через класс SugarPHPMailer.






Попробуйте пропустить строку темы через html_entity_decode (), похоже, у вас есть какие-то объекты в строке темы.
Если строка действительно не содержит закодированных значений перед отправкой, взгляните на это:
$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n");
// or
$subject= mb_encode_mimeheader($subject,"UTF-7", "Q", "\n");
Взгляните на эти сообщения, связанные с SugarCRM:
Если вы часто отправляете оскорбительный блок кода, это гарантирует, что вы быстрее получите лучший ответ. Скорее всего, вы где-то кодируете текст до того, как это действие будет выполнено. Как предлагалось ранее, вы можете найти это действие и исправить его или просто расшифровать строку темы перед отправкой электронного письма.
Я пробовал расшифровать его перед отправкой. Я также пробовал отправить такое же электронное письмо из функции php mail (), а не из класса SugarPHPMailer. Это не специфично для SugarCrm. То же самое происходит с mail ().
У меня была аналогичная проблема в подключаемом модуле Wordpress, над которым я работал, и я снова и снова ломал голову, пробуя разные предложения отсюда и в различных других результатах поиска Google. Я наконец нашел решение, которое сработало в моей ситуации, поэтому я поделюсь им. Я скажу, что это было решение Пола, которое я сначала попробовал, и оно не сработало, но причина была в том, что я пытался «сократить» решение. В моем случае просто вызов html_entity_decode () не сработал. Почему? Если бы я читал документ PHP более внимательно, это было бы очевидно. Моя проблема заключалась в кодировании в одинарной кавычке, а значение по умолчанию для html_entity_decode () - «ENT_COMPAT», которое оставляет одинарные кавычки. Решением было установить все параметры, и это сработало. На самом деле я, вероятно, мог бы отказаться от кодировки, так как кодировал UTF-8, но решил, что буду тщательным.
$decoded_str = html_entity_decode ( $value_to_decode, ENT_QUOTES, 'UTF-8' );
Урок здесь хороший: «Прочтите документацию». Я не говорю, что вы этого не сделали (вы, вероятно, сделали), но многие из нас спешат и замалчивают решение, которое сидит там, глядя нам в глаза, если бы мы только посмотрели.
Попробуй это:
$newsubject='=?UTF-8?B?'.base64_encode($subject).'?=';
Таким образом, вы не полагаетесь на PHP или кодировку MTA, вы выполняете работу, и почтовый клиент должен это понимать. В новой теме не будет никаких специальных символов, поэтому при доставке электронного письма проблем возникнуть не должно.
Я использую этого Питера. Выглядит хорошо, за исключением случаев, когда объект довольно длинный. Вы знаете, как его разбить? Я имею в виду, какой размер должен быть разбит на разделы? и как?
Совершенно замечательное решение. Огромная благодарность тебе, @Peter, за завершение трехчасового сеанса выдергивания волос !!!
Вы можете использовать chunk_split (60 символов) и применить его к каждому фрагменту, а также добавить новую строку и несколько пробелов для объединения фрагментов. Я говорю 60 символов, чтобы объединить остальную часть заголовка кодирования.
У меня сработало, спасибо. Я использую символ ® в теме письма и использую Symfony и Swifmailer.
Вы должны использовать mb_encode_mimeheader, просто не забудьте установить раньше.
mb_internal_encoding("UTF-8"); //has to be set (of course your internal encoding may not be UTF-8).
$subject = mb_encode_mimeheader($subject,'UTF-8','Q');
Он позаботится о кодировании в (читаемый человеком) Quoted-printable, когда это необходимо, и автоматически разбивает тему на нужное количество строк в зависимости от длины.
Пробовали оба безуспешно. Я такого раньше не видел. Спасибо за ответ.