Когда я пытаюсь отправить 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: <do_not_reply@a4isp.com>' . "\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.
Попробуй это:
$newsubject='=?UTF-8?B?'.base64_encode($subject).'?=';
Таким образом, вы не полагаетесь на PHP или кодировку MTA, вы выполняете эту работу, и почтовый клиент должен ее понимать. Никаких специальных символов в вашем новом предмете не будет, поэтому при доставке электронной почты никаких проблем не возникнет.
У меня была аналогичная проблема в подключаемом модуле 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' );
Урок здесь хороший, «Прочитайте документы». Я не говорю, что вы этого не сделали (вы, наверное, сделали), но многие из нас спешат и замаскивают решение, которое сидит там, глядя нам в глаза, если мы только посмотрим.
Если строка действительно не содержит закодированных значений перед отправкой, посмотрите на это :
$subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n"); // or $subject= mb_encode_mimeheader($subject,"UTF-7", "Q", "\n");
Взгляните на эти сообщения, связанные с SugarCRM:
Вы должны использовать 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');
Он позаботится о кодировании (читаемый человеком). Котируемая печать при необходимости и автоматически разбивает объект на нужное количество строк в зависимости от длины.
Попробуйте запустить строку темы через html_entity_decode () , похоже, что у вас есть какие-то сущности в строке темы.
Попробуйте использовать SwiftMailer или другую библиотеку, которая обрабатывает все сложности создания и кодирования HTML-почты для вас.
Отправка блокирующего кода кода часто приводит к более быстрому реагированию. Скорее всего, вы кодируете текст где-то до этого действия. Как было предложено ранее, вы можете найти это действие и исправить его, или вы можете просто декодировать строку темы перед отправкой электронной почты.