Проблема с кодировкой при отправке письма

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Проблема с кодировкой при отправке письма

Непрочитанное сообщение mr. brightside » 2013-10-04 17:28:39

Добрый день уважаемые!

Да, знаю, что тема ултрапопулярная, но тем не менее у меня проблема.

Имею такой код:

Код: Выделить всё

$subject = "=?UTF-8?B?".base64_encode("Регистрация на сайте")."?=";
$from = "Система регистрации <admin@mydomain.ru>";
//$from = "=?UTF-8?B?".base64_encode("Система регистрации <admin@mydomain.ru>")."?=";
$headers = "MIME-Version: 1.0 \r\n";
$headers .= "From: $from\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
//$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "Content-Transfer-Encoding: base64\r\n";

$letter = "<p>Тест</p>";
mail("my_mail@somewhere.ru", $subject, $letter, $headers);
Не передаётся нормально заголовок From. Т.е. в конечном MUA он приходит кракозябрами. При этом, на mail.ru и на gmail.com приходит нормально, без кракозябр. Проблема случается только при отсылке на свой домен (свой же сервак).

Если русские символы переписать на английские - английский придёт отлично.

Если вместо строки:

Код: Выделить всё

$from = "Система регистрации <admin@mydomain.ru>";
Использовать закомментированную строку ниже:

Код: Выделить всё

$from = "=?UTF-8?B?".base64_encode("Система регистрации <admin@mydomain.ru>")."?=";
то MTA отказывается посылать письмо с сообщением в логе:

Код: Выделить всё

your mailer sends invalid headers
Пробовал также играться с Content-Transfer-Encoding. Ставил 8 бит (сейчас закомментировано) и 64base. Однако, не помогло.

Хочу в теме получить русские буквы, а не получается.

Есть у кого-нибудь идеи?
Только FreeBSD, только хардкор

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

PYO
сержант
Сообщения: 187
Зарегистрирован: 2011-08-18 12:46:45

Re: Проблема с кодировкой при отправке письма

Непрочитанное сообщение PYO » 2013-10-04 19:20:40

Код: Выделить всё

$from = "=?UTF-8?B?".base64_encode("Система регистрации")."?= <admin@mydomain.ru>");
Как-то так.

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Проблема с кодировкой при отправке письма

Непрочитанное сообщение mr. brightside » 2013-10-06 23:31:57

PYO писал(а):

Код: Выделить всё

$from = "=?UTF-8?B?".base64_encode("Система регистрации")."?= <admin@mydomain.ru>");
Как-то так.
Оказывается, дело в MTA/MUA

Некоторые, воспринимают заголовок в начале, а некоторые в конце.

Поэтому, я указал так:

Код: Выделить всё

$subject = "=?UTF-8?B?".base64_encode("Регистрация на сайте")."?=";
$from = "Система регистрации <admin@mydomain.ru>";
$headers = "MIME-Version: 1.0 \r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
$headers .= "From: $from\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
The Bat! стал нормально воспринимать тему, но аутлук (2003/2007/2010/2013) упорно выводит кракозябры.

Evolution в Debian также нормально воспринимает заголовки. Остальные MUA не проверял.
$letter = "<p>Тест</p>";
Только FreeBSD, только хардкор

PYO
сержант
Сообщения: 187
Зарегистрирован: 2011-08-18 12:46:45

Re: Проблема с кодировкой при отправке письма

Непрочитанное сообщение PYO » 2013-10-06 23:51:14

PYO писал(а):

Код: Выделить всё

$from = "=?UTF-8?B?".base64_encode("Система регистрации")."?= <admin@mydomain.ru>");
Как-то так.
http://tools.ietf.org/html/rfc5322#section-2.1 - использовать только 7-ми битные символы.
http://tools.ietf.org/html/rfc5322#section-3.4 - как можно указывать адреса

PYO
сержант
Сообщения: 187
Зарегистрирован: 2011-08-18 12:46:45

Re: Проблема с кодировкой при отправке письма

Непрочитанное сообщение PYO » 2013-10-07 0:24:37

PS А еще есть хорошие функции:
mb_encode_mimeheader
mb_send_mail

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Проблема с кодировкой при отправке письма

Непрочитанное сообщение mr. brightside » 2013-10-07 0:37:38

PYO писал(а):PS А еще есть хорошие функции:
mb_encode_mimeheader
mb_send_mail
честно говоря, я хотел пошаманить с mime_header_encode, но и эти опробую.

Уж больно хочу, чтобы аутлук тоже работал.

Интересно посмотреть консольные MUA, типа mutt, будет время - также запарюсь.

Спасибо большое, по результату отпишусь :-D
Только FreeBSD, только хардкор

snorlov
подполковник
Сообщения: 3927
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Re: Проблема с кодировкой при отправке письма

Непрочитанное сообщение snorlov » 2013-10-07 7:05:12

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