Проблемы с кодировкой в теме письма
Рубрика: Что нового?
13 Июл. 2010Столкнулся с проблемой кодировки при использовании mail() функции в php. Для меня было очень странным что тело письма приходит в нормальной кодировке, а тема письма — в иероглифах...
---Как тема так и текст письма — задавался статически прямо в скрипте. Я конечно же подумал бы что виновата кодировка скрипта — но текст (тело) письма приходит ведь в нормальном формате! Начал копать всевозможные варианты как задать кодировку в mail() и тп. Все результаты ушли к тупому убийству времени, ничего не получилось.
Тут я вспомнил что когда то делал обзор одного из расширений позволяющих отправлять почту (вместе с вложениями и тп), назывался он «SwiftMailer». Не долго думая я нашел тему «Подключаем SwiftMailer к Yii» и подключил это дело к себе. Все получилось достаточно просто и компактно как в примере:
function sendHtmlMail($from, $to, $subject, $body, $attachments = array()) {
spl_autoload_unregister(array('YiiBase','autoload'));
Yii::import('application.vendor.swift.swift_required', true);
spl_autoload_register(array('YiiBase','autoload'));
//Sendmail
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
//Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);
//Create a message
$message = Swift_Message::newInstance($subject)
->setFrom(array($from))
->setTo(array($to))
->setBody($body)
;
//Send the message
$result = $mailer->send($message);
}
sendHtmlMail($settings->fromemail, $settings->email, "Новый заказ на сайте " . $settings->sitename, $message);
Как не странно — но все заработало. Заголовок и тело письма приходят в нормальной кодировке. Подключил я это дело максимум за 15 минут, а убил на ковыряние проблемы наверное пол дня.... Если столкнетесь с такой фигней как я — используйте SwiftMailer :)
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Долгожданный релиз 1.1.1 по праву можно назвать service pack к 1.1.0: исправлено более двадцати ошибок. Добавлено более тридцати улучшений и ... "Yii PHP framework 1.1.1 и 1.0.12"
- Поздравляю всех с выходом Yii Framework 1.1 beta
next
Список изменений
Загрузить версию 1.1 beta
... "Yii PHP framework 1.1 beta"
- Заказали мне в общем сделать на сайте элемент, который информировал бы о кол-ве людей на сайте. Некий счетчик живого онлайна. ... "Хитрый счетчик "онлайна на сайте""

[guest] Михаил
Было сказано: Вторник, 13 Июль 2010
тож было такое. нужно было закодировать тему:
Subject: =?charset?Encode_Method(1байт)?Title1?=\r\n
\t=?charset?Encode_Method(1байт)?Title2?=\r\n
Где: charset - кодировка символов;Encode_Method(1байт) - метод для декодирования ("B" - Base64 || "Q" -quoted-printable);Title1 - 1ая часть кодированного заголовка;Title2 - 2ая часть кодированного заголовка.
кстати, это повышает доверие антиспам-фильтров.

[guest] Гость
Было сказано: Вторник, 13 Июль 2010
Просто стоит правильно формировать заголовки письма subject, from, to с указанием кодировки, метода кодирования - как написал Михаил

[guest] Гость
Было сказано: Вторник, 13 Июль 2010
А вы можете написать пример виджета на jQuery, например простейший показ 3 картинок в цикле. Чтобы понять, как код на jQuery правильно обернуть в виджет yii.


