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