Подтвердить что ты не робот

Строка сообщения PHP Mail

Когда я пытаюсь отправить HTML-кодированное письмо с PHP, если строка темы содержит специальные символы, такие как "Here 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 the Information You Requested";

$body = html_entity_decode("<html><body>" . $email_html_body . "</body></html>");

mail($email_to,$email_sub,$body,$headers);

Он дает ту же ошибку, что и ее запуск через класс SugarPHPMailer.

4b9b3361

Ответ 1

Попробуйте следующее:

 $newsubject='=?UTF-8?B?'.base64_encode($subject).'?=';

Таким образом, вы не полагаетесь на PHP или кодировку MTA, вы выполняете эту работу, и почтовый клиент должен ее понимать. Никаких специальных символов не будет присутствовать в вашем новом предмете, поэтому при доставке электронной почты никаких проблем не возникнет.

Ответ 2

У меня была аналогичная проблема в подключаемом модуле 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' );

Урок здесь хороший, "Прочитайте документы". Я не говорю, что вы этого не сделали (вы, вероятно, сделали), но многие из нас спешат и замаскируют решение, которое сидит там, глядя нам в глаза, если мы только посмотрим.

Ответ 3

Если строка действительно не содержит закодированных значений перед отправкой, посмотрите this:

$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n");
// or
$subject= mb_encode_mimeheader($subject,"UTF-7", "Q", "\n");

Взгляните на эти сообщения, связанные с SugarCRM:

Ответ 4

Вы должны использовать 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');

Он позаботится о кодировании (читаемый человеком). Котируемая печать при необходимости и автоматически разбивает объект на нужное количество строк в зависимости от длины.

Ответ 5

Попробуйте запустить строку темы через html_entity_decode(), похоже, что у вас есть несколько объектов в строке темы.

Ответ 6

Попробуйте использовать SwiftMailer или другую библиотеку, которая обрабатывает все сложности создания и кодирования HTML-почты для вас.

Ответ 7

Отправка повреждающего блока кода часто приводит к более быстрому реагированию. Скорее всего, вы кодируете текст где-то до этого действия. Как было предложено ранее, вы можете найти это действие и исправить его, или вы можете просто декодировать строку темы перед отправкой электронной почты.