Уголок СУ-11 на просторах вселенной

четверг, 13 мая 2010 г.

корректная отправка почты из php с русским языком в теме и обратном адресе

Столкнулся с забавной проблемой. Есть хостинг - nic.ru. Необходимо из PHP скрипта отправить письмо. Локаль площадки (шел, бд) utf-8. Отправляю письмо. Получаю письмо клиентом (thunderbird, evolution) - все в порядке. Засаду обнаружил случайно. Зашел на mail.ru проверить свою почту и обнаружил. В качестве обратного адреса и темы письма - <без названия>, тема - иероглифы. Перелапатил php.net, форумы, конфиги апача, php, sendmail. Чисто случайно наткнулся на RFC по почте. Где и нашел решение проблемы. В RFC в теме письма, обратном адресе не может быть русского языка. Его нужно кодировать в base64, а затем завернуть в UTF-8 (т.к. это наша локаль системная).
$primer = '=?UTF-8?B?'.base64_encode('Администратор сайта').'?='.";
Второй нюанс. Хедеры передаются последовательно, разделителем хедера является переход строки. завершение хедеров - два перехода. После хедеров идут данные.
По скольку наш хостинг - freeBSD. Конец строки - \n, коретку переводить не нужно.
Ниже пример всей конструкции.



Комментариев нет: