Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2007-02-18 22:19:21

kibik
Гость

Проблема с кодировкой в почтовых уведомлениях

Приходит примерно такое:

Subject: Сообщение в теме: 'мЮПСВМХЙХ'
User написал ответ в теме '', на которую Вы, в своё время, подписались на форуме.

Как быть? Сборка ваша.

#2 2007-02-18 23:17:21

KCEOH
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Тож самое, тока сборка своя, но юзаю UTF-8. Как понимаю, надо перебодяжить функцию отправки сообщения, чтоб в заголовок(точнее в тему, которая subj) добавлять кодировку?

#3 2007-02-18 23:36:49

kibik
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Кстати, тема сообщения в уведомлении с этого форума пришла нормальная сейчас, но отправитель такой: PunBB ??-?????? ???????? ????? <hcs @ mail.ru>

#4 2007-02-19 04:54:43

hcs
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Исправления в нашей сборке затрагивают конвертирование темы в кои-8. Эти изменения еще не вошли в архив.
Изменения отправителя пока не проводились вообще.

#5 2007-02-19 08:33:59

kibik
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Нельзя ли их выложить здесь, раз в архив пока не вошли?

#6 2007-02-19 09:10:26

hcs
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

include/email.php
заменить функцию  pun_mail на этот вариант:

//
// Wrapper for PHP's mail()
//
function pun_mail($to, $subject, $message, $from = '')
{
    global $pun_config, $lang_common;

    // Default sender/return address
    if (!$from) {
        $from = '"'.str_replace('"', '', $pun_config['o_board_title'].' '.$lang_common['Mailer']).'" <'.$pun_config['o_webmaster_email'].'>';
// BEGIN FIX FOR UTF-8 ENCODING
        $from = iconv("UTF-8", "KOI8-R", $from);
// END FIX
    }
    // Do a little spring cleaning
    $to = trim(preg_replace('#[\n\r]+#s', '', $to));

// BEGIN FIX FOR UTF-8 ENCODING
// ORIGINAL:
//    $subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
//    testing:
    $subject = '=?KOI8-R?B?'.base64_encode(iconv("UTF-8", "KOI8-R", trim(preg_replace('#[\n\r]+#s', '', $subject))))."?=\n";
// END FIX

    $from = trim(preg_replace('#[\n\r:]+#s', '', $from));

    $headers = 'From: '.$from."\r\n".'Date: '.date('r')."\r\n".'MIME-Version: 1.0'."\r\n".'Content-transfer-encoding: 8bit'."\r\n".'Content-type: text/plain; charset='.$lang_common['lang_encoding']."\r\n".'X-Mailer: PunBB Mailer';

    // Make sure all linebreaks are CRLF in message
    $message = str_replace("\n", "\r\n", pun_linebreaks($message));

    if ($pun_config['o_smtp_host'] != '')
        smtp_mail($to, $subject, $message, $headers);
    else
    {
        // Change the linebreaks used in the headers according to OS
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'MAC')
            $headers = str_replace("\r\n", "\r", $headers);
        else if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN')
            $headers = str_replace("\r\n", "\n", $headers);

        mail($to, $subject, $message, $headers);
    }
}

#7 2007-02-19 09:16:07

kibik
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Большое спасибо, буду пробовать.

#8 2007-03-11 09:52:07

niikto
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

hcs
Большое тебе спасибо!

имею дело с 2-мя сборками, и вот немного изменил опытным путем твою доделку:

В сборке Dexus есть выбор для пользователя - либо ему придет просто уведомление о новом посте в теме, на кою он подписан, либо ему придет и содержание поста либо ему придет содержание в виде html

так вот я поэкспериментировал, и оказалось сперва, что в денвере у меня iconv не работает smile - поэтому пришлось экспериментировать уже на сервере.

В при веденом выше коде есть 2 интересующих места:

// BEGIN FIX FOR UTF-8 ENCODING
        $from = iconv("UTF-8", "KOI8-R", $from);
// END FIX

и

// BEGIN FIX FOR UTF-8 ENCODING
// ORIGINAL:
//    $subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
//    testing:
    $subject = '=?KOI8-R?B?'.base64_encode(iconv("UTF-8", "KOI8-R", trim(preg_replace('#[\n\r]+#s', '', $subject))))."?=\n";
// END FIX

первое переводит отправителя в koi8 второе - тему.
Я выяснил что Тему переводить - надо, а вот отправителя -нет. иначе он приходит так: жПТХН бЧФПЛПНРМЕЛУБ тЕБЛФПТ З. пНУЛ. mailer вместо Форум Автокомплекса Реактор г. Омск. mailer.

поэтому я закомментировал первую строчку, и вставил эти же куски в следующую функцию function pun_mail_html , которая идет сразу же после function pun_mail

Редактировался niikto (2007-03-11 09:53:15)

#9 2007-06-06 00:00:13

Itomonster
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Внимательно прочитал эту тему, но вопрос у меня все же остался.
У меня стоит стандартная сборка, кодировка win1251, но в сообщениях с уведомлениями о новых постах тема всегда нечитабельна. Подскажите, как исправить это? Если возможно привести прямо строчки кода, буду благодарен -- в php не понимаю ничего.

#10 2007-06-06 08:53:31

niikto
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

а ты чем почту получаешь?
ато зебат касячит то что понимает мозилла тундерберд

#11 2007-06-06 09:48:31

hcs
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

 $subject = '=?KOI8-R?B?'.base64_encode(trim(preg_replace('#[\n\r]+#s', '', $subject)))."?=\n";

#12 2007-06-06 15:53:17

Itomonster
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Почту проверяю Оперой. Действительно, Tunderbird читает те же письма нормально, и интерфейс Gmail, кстати, тоже. Так что возможно, что это косяк самой программы.

hcs, прошу прощения, ну куда это нужно вставлять? :-)

P.S. Кстати, уведомление с вашего форума пришло вот от такого адресата: "=?KOI8-R?B?IlB1bkJCINDPLdLV09PLySDwz97Uz9fZyiDSz8LP1CIgPGhjc0BtYWlsLnJ1Pg==?=@wwwhosting.tomica.ru". Это нормально?

#13 2007-06-06 16:01:12

hcs
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

smile Надоела мне уже эта почта.

#14 2007-06-13 11:27:21

mesemb
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Только лучше не

'=?KOI8-R?B?'

а

'=?'.$lang_common['lang_encoding'].'?B?'

Редактировался mesemb (2007-06-13 11:30:29)

#15 2007-07-03 06:52:10

svelludo
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Действительно, с кодировками надо что-то делать. Стоит клиентом полный Аутглюк, так мало того, что в поле "From:" сплошные крокозяблы, он еще и UTF-8 не понимает автоматом в теле письма (там вааще ужос), приходится его ручками перетыкивать. Хорошо, если человек понимает, что надо сделать... Но ведь есть юзера при виде такой мессаги у которых крыша поедет -)

Вот как бы эту проблему побороть ?

#16 2007-07-03 11:30:48

artoodetoo
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

потестируйте, пожалуйста, как ходят почтовые сообщения с http://master.1wd.ru/
зарегистрируйтесь и тестируйте.

для русского языка использую конвертацию в koi8-r ( через iconv() )

еще есть вот такое:

    $subject = '=?'.$encoding.'?B?'.base64_encode($subject).'?=';

здесь $encoding == 'koi8-r' для русского языка, для нерусского utf-8 smile работает вродебы в обоих случаях smile

#17 2007-08-26 16:53:38

BrokenBrake
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Честно говоря, так и не вкурил, что и как надо делать sad И почему так модна устаревшая KOI.
Мне (и, наверно, всем пользователям форума) письма приходят вот так:

mp_send_gmail.png

Причем, некоторые письма вообще пустые. В частности вот там верхнее, у которого тема тоже так коряво.
Жуть. Кстати, это если в Gmail смотреть, а в Thunderbird почти нормально, только почему-то часть служебной информации появляется в теле письма.

mp_send_thunderbird.png

Вот такие пироги. Я сам бы попробовал всё исправить, но что-то туплю. Вы не могли бы мне просто подсказать, где мне копать? Как вообще в движке организована функция отправки писем?

P.S. А нельзя ли организовать отправку через GMAIL, а не через основной SMTP? Пробовал подставлять логины-пароли - не работает. Вроде бы на официальном форуме где-то находил, что это потому что надо по защищенному протоколу подцепляться, и выкладывали там какую строчку изменить. Изменения эти вносил, но так и не заработало, к сожалению.

#18 2007-08-27 05:22:39

BrokenBrake
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Вот еще, видимо, чтобы жизнь малиной не казалась smile Послал себе email через форум...

mail_from_mp_gmail.png

То же самое письмо в Thunderbird...

mail_from_mp_thunderbird.png

Добавлено спустя     2 минуты   6 секунд:
Я так понимаю, что "конверт" письма и его содержание отправляются в разных кодировках. Или что? Я вообще с почтой почему-то нифига не разбираюсь. Но разберусь, если вы подскажете, где это все менять. Я лишь примерно представляю.

Добавлено спустя     2 минуты   24 секунды:
И вообще, сложно это изменить?

Редактировался BrokenBrake (2007-08-27 05:22:59)

#19 2007-08-27 09:31:42

artoodetoo
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

текст Subject и тело письма могут быть в разных кодировках.
кодировка Subject указывается непосредственнов строке, как "=?***?B?..."
а кодировка текста - в строке заголовка "Content-type: text/plain; charset=***"

вот для энтузиастов мой испробованный вариант функции из include/email.php

function pun_mail($to, $subject, $message, $from = '')
{
    global $pun_config, $lang_common;

    $sender = str_replace('"', '', $pun_config['o_board_title'].' '.$lang_common['Mailer']);
    if (isset($lang_common['mail_encoding']))
    {
        $encoding = $lang_common['mail_encoding'];
        $subject = iconv($lang_common['lang_encoding'], $lang_common['mail_encoding'], $subject);
        $message = iconv($lang_common['lang_encoding'], $lang_common['mail_encoding'], $message);
        $sender = iconv($lang_common['lang_encoding'], $lang_common['mail_encoding'], $sender);
    }
    else
        $encoding = $lang_common['lang_encoding'];

    // Default sender/return address
    if (!$from)
        $from = '"'.'=?'.$encoding.'?B?'.base64_encode($sender).'?=" <'.$pun_config['o_webmaster_email'].'>';

    // Do a little spring cleaning
    $to = trim(preg_replace('#[\n\r]+#s', '', $to));
    $subject = trim(preg_replace('#[\n\r]+#s', '', $subject));
    $from = trim(preg_replace('#[\n\r:]+#s', '', $from));

    $subject = '=?'.$encoding.'?B?'.base64_encode($subject).'?=';

    $headers = 'From: '.$from."\r\n".'Date: '.date('r')."\r\n".'MIME-Version: 1.0'."\r\n".'Content-transfer-encoding: 8bit'."\r\n".'Content-type: text/plain; charset='.$encoding."\r\n".'X-Mailer: PunBB Mailer';

    // Make sure all linebreaks are CRLF in message (and strip out any NULL bytes)
    $message = str_replace(array("\n", "\0"), array("\r\n", ''), pun_linebreaks($message));

    if ($pun_config['o_smtp_host'] != '')
        return smtp_mail($to, $subject, $message, $headers);
    else
    {
        // Change the linebreaks used in the headers according to OS
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'MAC')
            $headers = str_replace("\r\n", "\r", $headers);
        else if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN')
            $headers = str_replace("\r\n", "\n", $headers);

        return mail($to, $subject, $message, $headers);
    }
}

суть в том, что в языковом файле common может быть указана отдельно кодировка почты koi8-r или windows-1251. если ничего не указано - будет использоваться кодировка форума, т.е. скорее всего utf-8.
эксперименты показали, что письма читаются правильно в любом раскладе! на всякий случай у меня
сейчас в lang/*/common.php прописано

'lang_encoding'            =>    'UTF-8',
'mail_encoding'            =>    'koi8-r',

#20 2007-08-27 10:04:35

BrokenBrake
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Не понимаю все же, зачем одновременно две кодировки? 8-о

Добавлено спустя       29 секунд:
То есть твой вариант тоже будет заголовки отсылать в одной, а тело в другой?

#21 2007-08-27 12:38:09

artoodetoo
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

нет.
1) ты задал вопрос "могут ли", я ответил "да, могут".
2) для экскрементов дал тебе скрипт в котором можно испытать различные кодировки отправлений не меняя кодировки форума. достаточно изменить строку в языковом файле.
может быть какой-то вариант окажется оптимальным.

#22 2007-08-27 13:17:06

BrokenBrake
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Понял, спасибо. Попробую.

#23 2007-08-30 18:09:25

BrokenBrake
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

artoodetoo, огромное спасибо! Работает отлично.

#24 2007-10-29 17:31:19

Andy
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Супер, теперь всё отлично работает и у меня!

#25 2007-10-29 18:03:34

artoodetoo
Гость

Re: Проблема с кодировкой в почтовых уведомлениях

Вобщем почтовая функция из поста #19 доказала свою рабочесть smile

Есть идея для развития — давать кодировку писем на выбор пользователя, так же как часовой пояс или стиль.
Исторически сложилось, что для Рунета главная кодировка писем koi-8r, в то же время если заголовок сформирован правильно, то большинство почтовых клиентов поймут и windows-1251 и utf-8.

Проблемы возникают с веб-клиентыми почты, в первую очередь буржуйскими. Мы не можем сделать одну универсальную настройку на всех, поэтому пусть каждый выбирает сам, такое мое IMHO.

Высказывайтесь пожалуйста.

Подвал доски

Под управлением FluxBB. Хостинг Hostens