Страница 1 из 1

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

Добавлено: 2013-10-04 17:28:39
mr. brightside
Добрый день уважаемые!

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

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

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

$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. Однако, не помогло.

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

Есть у кого-нибудь идеи?

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

Добавлено: 2013-10-04 19:20:40
PYO

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

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

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

Добавлено: 2013-10-06 23:31:57
mr. brightside
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>";

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

Добавлено: 2013-10-06 23:51:14
PYO
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 - как можно указывать адреса

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

Добавлено: 2013-10-07 0:24:37
PYO
PS А еще есть хорошие функции:
mb_encode_mimeheader
mb_send_mail

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

Добавлено: 2013-10-07 0:37:38
mr. brightside
PYO писал(а):PS А еще есть хорошие функции:
mb_encode_mimeheader
mb_send_mail
честно говоря, я хотел пошаманить с mime_header_encode, но и эти опробую.

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

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

Спасибо большое, по результату отпишусь :-D

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

Добавлено: 2013-10-07 7:05:12
snorlov
там, где не видно, посмотри исходный текст сообщений, которые нормально видятся и сделай вывод...