понедельник, 19 ноября 2007 г.

Отправка Unicode почты из PHP

Для отправки Unicode сообщений в PHP имеется функция mb_send_mail. Она доступна, если установлено расширение mbstring.

Если mbstring по умолчанию настроен, как нужно, проблем нет - но иногда бывает по-другому :-)

Чтобы не полагаться на .htaccess и прочие внешние факторы, настроить параметры отправки лучше прямо в коде:

mb_language("uni");
mb_internal_encoding("UTF-8");


Таким образом, UTF-8 содержимое будет правильно интерпретировано mbstring.

Отправить письмо можно так:

ini_set('sendmail_from', $from);
mb_send_mail($to, $subject, $body, $from);

И $subject, и $body должны быть в UTF-8.

Предварительно можно перекодировать заголовки:

$from = 'From: "' . mb_encode_mimeheader('Петр Петрович') . '" ';

Ну, и пара линков по теме:

Unicode и PHP (julik live - на русском)

Что может неправильно работать в PHP при использовании UTF-8 (англ.)

4 комментария:

  1. А что, разве нельзя использовать обычную функцию mail() для отправки писем в utf-8 предварительно все перекодировав?
    Так что - не получится?

    ОтветитьУдалить
  2. Ну а зачем ? Есть же готовое решение, в данном случае правильно юзать его, а не изобретать велосипеды с ручным перекодированием. Так багов меньше ! :-)

    ОтветитьУдалить
  3. Так если скрипт работает в utf-8, то можно использовать обычную mail()!

    ОтветитьУдалить