08.07.2019

Php mail кодировка письма. Проблемы с кодировкой в Mail и их возможные решения


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

Однако как-то раз мне пришло очень важно письмо, которое я долго ждал, но оно тоже состояло из кракозябр вместо букв . Смысл его мне надо было выяснить во что бы то не стало, поэтому я начал искать, как можно расшифровать текст в таких случаях.


Оказывается подобные проблемы возникают, когда письмо пишется без указания кодировки, а почтовый клиент, пытаясь сам подобрать нужную кодировку, часто делает это неправильно. Прочесть письмо в таком случае можно несколькими способами:
  • указать почтовому клиенту вручную правильную кодировку
  • воспользоваться онлайн декодером (дешифратором) почты

В Интернет я нашел ряд декодеров, однако почти все они со своей задачей справились плохо или совсем не справились. Лишь один из них сделал все быстро, качественно, и им я пользуюсь с тех пор всегда.

Декодер Лебедева – один из онлайн инструментов на сайте самой крупной и известной дизайн-студии в России. Он поддерживает более двух десятков видов кодировок, как распространенных, так и довольно экзотичных: UTF-8, KOI8, ASCII, CP-1251, Shift_JIS, Base64, HTML-entities и др.

Декодер Лебедева имеет два режима работы, которые называются: «просто» и «сложно».

Простой режим представлен обычным окошком, куда вы загоняете свой текст из кракозябр, и кнопкой «расшифровать».

В сложном режиме Вы можете вручную выбирать кодировки как исходного так и полученного текста, хотя честно говоря, не знаю, когда это может пригодиться. Лично мне всегда хватало простого режима работы — декодер Лебедева справлялся во всех случаях на УРА.

Помимо того, что вместо кракозябр Вы получите текст, дешифратор Лебедева укажет еще, в какой именно кодировке было написано письмо.


Заранее предвижу замечания некоторых моих постоянных читателей о том, что подобные сервисы попросту крадут Вашу личную информацию в своих корыстных целях. Но на это у меня есть ответ в духе Артемия Лебедева: «не хотите – не пользуйтесь». Этот продукт лишь для тех, кто не страдает манией преследования и тотальной слежки со стороны Большого брата. А то, что в этом году данный декодер отпраздновал уже 15 лет своей жизни, кое о чем да говорит…

Друзья, декодер Лебедева уже не один раз выручал меня, поэтому я смело рекомендую его Вам. Когда в следующий раз Вы получите письмо непонятного содержания, состоящее из кракозябр вместо букв, вспомните об этой статье, и Вы сможете быстро решить эту проблему.

авторитет 4 октября 2014 в 05:20

Кракозябрица в имени отправителя письма на почте Yandex

  • PHP ,
  • Программирование
Введение
Доброго времени суток, уважаемые!

Хочу кратенько поведать о проблеме отображения имени отправителя письма при отправке на ящики Яндекс.Почты и привести ее решение.

Заранее прошу маститых программистов меня простить. Возможно, для вас эта ситуация не стоит выеденного яйца.
Но мне пришлось посидеть над ее решением. Надеюсь, это может оказаться полезным кому-нибудь.

С чего все начиналось

Итак, есть самописный сайт на php + angular. Обычный лендинг с калькулятором.
Пришла очередь задаче по отправке писем клиентам и менеджерам о поступивших заказах.

Казалось бы, чего уж проще? Берешь и пишешь:

$headers = "MIME-Version: 1.0" . PHP_EOL . "Content-Type: text/html; charset=utf-8" . PHP_EOL . "From: Почтальон Симпатикович Зигнатуров " . PHP_EOL . "Reply-To: [email protected]" . PHP_EOL; $to = "[email protected], [email protected]"; $letter = "order!"; $result = mail($to, $subject, $letter, $headers);

При этом сохраняем файл в кодировке UTF-8 без BOM и выполняем.
Смотрим почтовый ящик gmail - все в порядке! Имя отправителя отображается вполне себе корректно:

Смотрим Яндекс - опять красота.

Уже открываю шампанское… Вот она, победа. Но не тут-то было.
Открываю письмо и вижу:

… та-дам! Кракозябрица.

Убираю шампанское, достаю бубны. Начинаю шерстить интернет в поисках решения, пишу в поддержку Яндекса.
Мне приходит ответ: «Попробуйте кодировать в base64». Что кодировать - я так и не понял. Пробовал кодировать кириллические символы и заголовок целиком.

Но приходит мысль: зачем изобретать велосипед? Надо посмотреть, как делают старшие товарищи по цеху. Открываю первое письмо и смотрю его свойства. Что же я там вижу?

Content-Type: text/html; charset=windows-1251 .... From: =?windows-1251?B?RkwucnU=?= Subject: =?windows-1251?B?ze7i++Ug7/Du5ery+yDt4CBGTC5ydQ==?=

Логика подсказывает, что заветное решение находится внутри символов "=?… ?=" (да простится мне серость моя сообществом мудрейших!).
Смотрю дальше и вижу кодировку windows-1251 . Так, еще один шаг к успеху! Подвигаю шампанское ближе.

Затем идет еще символ «B» и знак вопроса. Отбрасываю их, беру оставшийся код и смотрю, что же это такое?

Так, у меня файл с кодировкой utf-8. Сохраняю его как windows-1251 и запускаю снова.

Решение вопроса

Для файлов в кодировке utf-8 я использовал такое решение:

Function adopt($text) { return "=?UTF-8?B?".base64_encode($text)."?="; } $headers = "MIME-Version: 1.0" . PHP_EOL . "Content-Type: text/html; charset=utf-8" . PHP_EOL . "From: ".adopt("Почтальон Симпатикович Зигнатуров")." " . PHP_EOL . "Reply-To: [email protected]" . PHP_EOL; $to = "[email protected], [email protected]"; $letter = "order!"; $result = mail($to, adopt($subject), $letter, $headers);

Обратите внимание - тема письма также закодирована:

В результате я получил корректное отображение отправителя письма:

Прошу не судить строго за мой первый литературно-технический очерк. Буду благодарен профессиональным отзывам и дополнением материала.

Теги: php, email, кодировка, имя отправителя

Встроенный почтовый клиент Mac OS X с логичным и незамысловатым названием Mail есть за что похвалить — например, за развитую систему фильтрации писем на основе правил, за поддержку дополнительных плагинов, расширяющих возможности почты (вроде шифрования), за тесную интеграцию с клиентом iPhone и т.д. Но поводов для недовольства у пользователей Mail тоже хватает, особенно если они проживают не в англоговорящих странах. Главный повод — кодировка . Пожалуй, нет ни одного русского владельца Мака, который не сталкивался в Mail.app с тем, что принято называть словом «кракозябры» — это символьные шедевры вроде ÈØàÞÚÐï íÛÕÚâàØäØÚÐæØï, аЈаИб�аОаКаАб� б�аЛаЕ или даже Широкая электрРв названиях тем, содержимом писем или именах вложений.

Сегодня мы расскажем вам о сущности этой проблемы и некоторых путях её решения.

Mail.app от других почтовых клиентов традиционно отличает повышенная чувствительность к тому, из какой программы было отправлено письмо . Дело в том, что разные почтовые клиенты имеют присущие только им особенности разметки и оформления электронных писем, невидимые глазу пользователя, зато воспринимаемые серверами и программами.

Проблема усугубляется ещё и тем, что в настройках Mail невозможно задать кодировку входящих писем по умолчанию — т.е. способ перевода привычных нам букв, цифр и знаков препинания в привычные компьютеру биты и байты. Mail пытается автоматически распознать кодировку входящей почты, и как-то непосредственно повлиять на этот процесс пользователь тоже не может.

Зато возможно повлиять на этот процесс косвенно. Набор кодировок, которые Mail использует для распознания, зависит от набора используемых всей системой кодировок . А Этот набор, в свою очередь, зависит от количества используемых системой языков . Отсюда вытекает первый совет — удалите из системы все неиспользуемые вами языки.

Зайдите в Системные настройки , выберите пульт «Язык и текст», и увидите следующий список:

Нажмите на кнопку «Редактировать список» и снимите соответствующие галочки. После этого перезагрузите компьютер или завершите сеанс.

Представленный скриншот сделан в системе Mac OS X 10.6.2. В Mac OS X 10.5 данный пульт настроек устроен несколько иначе, однако редактирование списка языков там организовано почти так же.

Следующий шаг — это настройки самого клиента Mail. Как мы уже сказали, в программе не предусмотрено никаких постоянных настроек кодировки. Но это не значит, что их нет вообще. На самом деле, через Терминал всё-таки можно заставить Mail работать с определённой кодировкой .

Но перед тем, как задать кодировку по умолчанию, надо узнать, какая это должна быть кодировка. Это придётся делать экспериментальным путём:

  1. найдите несколько писем с кракозябрами
  2. выберите первое и зайдите в меню Сообщение — Кодировка текста
  3. последовательно перепробуйте все кодировки, начинающиеся со слова «Кириллическая» (KOI8-R, ISO 8859-5, Windows), а также UTF-8
  4. если письмо стало читабельным, посмотрите на остальные письма: если и их можно прочесть, то считайте, что решение найдено
  5. в противном случае продолжайте перебор кодировок

Если вы нашли подходящую кодировку, то останется её зафиксировать. Скорее всего, это будет либо кодировка KOI8-R, либо UTF-8 . Полностью завершите Mail (по комбинации Cmd+Q) . Запустите Терминал (через Spotlight или из папки Программы/Служебные программы ), и введите команду:

defaults write com.apple.mail NSPreferredMailCharset koi8-r

defaults write com.apple.mail NSPreferredMailCharset utf-8

После чего нажмите Enter и закройте Терминал.

Если не хотите возиться с Терминалом, то можете установить и сменить кодировку через него:


Если предложенный выше вариант не сработает, попробуйте прописать через Терминал ещё один параметр:

defaults write com.apple.mail LeopardPreferredMailCharset utf-8

(или defaults write com.apple.mail LeopardPreferredMailCharset koi8-r)

Возможно, это поможет вам избавиться от проблем с кодировкой в темах и тексте писем. С русскими именами вложений ситуация ещё более загадочна. Многолетние наблюдения позволяют говорить о том, что в их порче виноват вовсе не Mail, а отправляющая почту программа. Например, известен глюк с письмами из Thunderbird — практически всегда имена вложений на русском приходят на Мак испорченными. Для решения этой проблемы в самом Thunderbird необходимо изменить значение параметра mail.strictly_mime.parm_folding равным единице.

Таким образом, причины и решения проблем в Mail лежат гораздо глубже, чем кажется сначала. Если же ничего не поможет, и адресованные вам письма по-прежнему будут приходить испорченными, советуем обратить внимание на другие почтовые клиенты.

Приходилось ли вам получать электронные письма, в которых на вас вместо родных русских букв пугающе смотрят непонятные символы? Спам мы в расчет не берем. Иногда очень важные нам люди присылают очень важную почту, которую невозможно прочитать. Или все-таки возможно? Давайте разберемся!

{mosloadposition debug}

Обычно подобные казусы с письмами случаются, когда вы пользуетесь почтовой программой на своем компьютере. Веб-сервисы почтовых служб могут автоматически приводить письмо к читабельному виду. А вот чтобы добиться такого же эффекта от почтовой программы вам придется открыть парочку меню и нажать несколько кнопочек.

Прежде всего, разберемся, почему написанное человеком на родном языке письмо вообще попадает к нам в виде непонятных символов. Дело в том, что отправитель письма создает его, используя неправильную или отличающуюся от настроек вашей почтовой программы кодировку. Напомним, что кодировкой называется соответствие определенному символу языка какого-либо конкретного знака, буквы, цифры. Для кириллических алфавитов, к коим относится наш русский язык, применяется кодировка Windows-1251. В почтовых программах необходимо использовать кодировку Кириллица (KOI8-R).

Как же решить проблему с нечитабельными символами в электронном письме? Очень просто! Достаточно указать почтовой программе ту кодировку, с использованием которой было создано данное письмо. Здесь можно либо включить опцию «Автоопределение» в настройках почтового клиента либо перебирать кодировки до тех пор, пока текст не обретет читабельный вид.

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

Почта Windows

Если для работы с электронной почтой вы используете программу «Почта Windows», изменить кодировку можно следующим образом. Дважды щелкните по нечитабельному письму. В открывшемся окошке в меню «Вид» выберите «Кодировка». Для начала попробуйте отметить «Кириллица (KOI8-R)».

Если письмо так и останется нечитабельным, щелкните пунктик «Дополнительно», за которым прячется довольно внушительный список доступных кодировок. К сожалению, отвечающая за автоматическое определение кодировки опция здесь отсутствует, поэтому придется действовать методом перебора, отмечая последовательно каждую кодировку из предлагаемого списка.


Когда подходящая кодировка будет найдена, письмо обретет читабельный вид.

Microsoft Outlook

В почтовой программе Outlook из пакета Microsoft Office 2007 выбрать нужную кодировку так же просто. Достаточно дважды щелкнуть по письму из папки «Входящие», а в открывшемся окошке с содержанием письма выбрать «Другие действия» - «Кодировка». Как и ранее, первой отмечаем «Кириллица (KOI8-R)». Если текст письма не приобрел понятный русскому человеку вид, то начинаем действовать методом перебора. Все доступные кодировки находятся за опцией «Дополнительно».


Поскольку программой Microsoft Outlook пользуется подавляющее число людей, рассмотрим еще один момент в работе с кодировками. К сожалению, у Microsoft Outlook 2007 также отсутствует настройка автоопределения кодировки входящих писем. Однако имеется возможность настройки кодировки исходящих сообщений. Чтобы получатели ваших писем не тратили драгоценные минуты на расшифровку иероглифов, потрудитесь открыть меню «Сервис» - «Параметры», перейти на вкладку «Сообщения» и нажать кнопочку «Язык».


Здесь в качестве кодировки исходящих сообщений должно быть указано «Кириллица (KOI8-R)».

Outlook Express

В почтовой программе Outlook Express, по умолчанию установленной в Windows XP, кодировка меняется схожим с Почтой Windows образом. Открыв письмо с непонятными символами, следует выбрать в меню «Формат» пункт «Кодировка». Здесь перечислены несколько вариантов кодировок, а за опцией «Дополнительно» их скрывается еще пара десятков. Вам нужно лишь подобрать подходящую кодировку и, возможно, присланное электронное письмо обретет читабельный вид.

Opera Mail

В заключении мы решили рассмотреть интегрированный в браузер Opera почтовый клиент. Здесь все очень просто: кодировка меняется в настройках браузера через меню «Вид» - «Кодировка». Этот параметр затрагивает не только почту, но и веб-страницы.

Можете отметить «Выбирать автоматически» либо попробовать методом перебора из многочисленных вариантов. Конечно, впоследствии, когда письмо удастся прочитать, следует вернуть настройки обратно. Так, по умолчанию лучше использовать кодировку «Кириллица» - «Автоопределение».


Если же все ваши попытки по расшифровки иероглифов в письмах не увенчались успехом, необходимо прибегнуть к помощи сторонних программ. Об одной из них, под названием Штирлиц, мы уже писали на страницах нашего сайта. Штирлиц работает с огромным числом кодировок и наверняка сможет сделать читабельным полученное вами электронное письмо.

Специально для Ячайник, Елена Карлтон

{mosloadposition cpanel}

Часто средствами PHP необходимо отправлять почту. Но как это сделать, чтобы письма приходили на максимально возможное количество разных почтовых систем?

На самом деле все очень просто, особенно, если ты знаешь где нажимать какие кнопочки. Но, чтобы найти действительно подходящее решение в данном вопросе, пришлось потратить много времени... А все мы помним, что время – это деньги!

Итак, приступим. Код письма может быть даже таким:

$date = date("Y-m-d H:i:s");
//email на который отправляем
$to = "";
//тема сообщения
$subject = "Новое сообщение. $date";
//как бы текст
$message = "





Текст письма



";
//headers
$headers = "Content-type: text/html; charset="utf-8"";
$headers .= "From: ИМЯ <ВАШ[email protected]>";
$headers .= "Reply-To: ";
mail($to, $subject, $message, $headers);
?>

Отправитель.

Важно понимать, что часть кода headres имеет очень важное значение. Т.к., например, mail.ru НЕ принимает письма, если Вы указываете автора письма (From), ненастоящего.
Т.е., например, Вы имеете сайт на сервере host.bo, при этом Mail.Ru знает, что письмо пришло оттуда, т.к. при отсылке письма отправляет еще и дополнительная информация, а не только та, которую Вы укажите.

Например:

Return-path:
Envelope-to: mailZero@сайт
Delivery-date: Mon, 16 Oct 2017 16:42:03 +0300
Received: from user by thehost.ua with local (Exim 666)
(envelope-from )
id 56565-0580J2-1d
for mailZero@сайт; Mon, 16 Oct 2017 16:42:02 +0300
To:
Subject: 2017-10-16 16:42:01 комментарий сайт
X-PHP-Originating-Script: 1708:script.php
Content-type: text/html; charset=utf-8
From:
Reply-To:
Message-Id: <[email protected]>
Date: Mon, 16 Oct 2017 16:42:02 +0300

NAME: Inverser.


EMAIL: mailZero@сайт


IP: 1.0.1.9


DATE: 2017-10-16 16:42:01


URL: сайт/42


TEXT: Андрей, не знаю, кто такой Лукас, но благодарю, видимо, что-то хорошее.

Поэтому, если, например, Вы укажите отправителем почту [email protected], то почтовая система Mail.Ru НЕ примет это письмо, так как будет «знать», что оно пришло не с её серверов, а с сервера host.bo.

Следующий параметр – кодировка.

Чтобы не было «кракозябр» или нечитаемых символов в письме, необходимо четко соблюсти правила.

$headers = "Content-type: text/html; charset="utf-8"";

должна быть именно ТАКОЙ, и никакой другой, если только Вы не используете другую кодировку (charset). Важную роль играют одинарные и двойные кавычки в этой строке. Желательно, чтобы она была именно такой, как указана выше, чтобы не было непонятных символов в письме:

Если в письме НЕ будет html тегов, а просто текст, то можно эту строку писать так:

$headers = "Content-type: text/plain ; charset="utf-8"";


© 2024
reaestate.ru - Недвижимость - юридический справочник