Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Кодировка в e-mail без зябриков

13K
06 апреля 2007 года
4айник
40 / / 23.12.2006
Может это и баян, но всё же!
Проблема:
С сайта осуществляется рассылка кириллицей!
Как сделать так, чтобы пользователи в разных странах (Германия, США, Польша и проч.) могли читать кириллицей, а не выводились зябрики?! Как правильно сделать кодировку?!
Не бейте сильно, если это оффтоп!!
8
07 апреля 2007 года
mfender
3.5K / / 15.06.2005
UTF-8 кодировку использовать
13K
07 апреля 2007 года
4айник
40 / / 23.12.2006
Цитата: mfender
UTF-8 кодировку использовать

А можно поподробнее, уважаемый mfender.. Где и в каком месте кода внедрить кодировку?!
А точно все импортные жители :) смогут читать кириллицей?!

10K
07 апреля 2007 года
jwagra
62 / / 23.08.2006
 
Код:
$charset = "utf-8";
$header = "Content-Type: text/html; charset=$charset\r\n";
mail($email, $theme, $text, $header);
13K
08 апреля 2007 года
4айник
40 / / 23.12.2006
Всё зашивилилось, спс, гуру!!!
Но есть одна накладка! А именно поле ТЕМА в письме.
Итак, при использовании utf-8 что мы имеем:
1. В OUTLOOK EXPRESS MSOFFICE RUS - тема отображается
2. На всех остальных версиях outlook, The Bat в поле тема - ?????????????
3. Если проверить ящик через майл.ру - там тема вообще пустая!
4. На почтовых серверах заграницей не проверялось.
Отсюда вопрос: Как эту пакость побороть?!
Привожу пример кода:
.........
$headers_abon = "From: [email]admin@ххх.ru[/email]\n";
$headers_abon .="X-Mailer: PHP/" . phpversion();
$headers_abon .="MIME-Version: 1.0\n";
$headers_abon .="Content-Type: text/plain; charset=utf-8\n";
$headers_abon .="Content-Transfer-Encoding: 8bit";
...........
далее идет текст сообщений и прочее. Сама страница в кодировке utf-8/

Помогите, плз!!!
239
08 апреля 2007 года
Dolonet
1.7K / / 20.05.2000
А тема фактически в какой кодировке написана?
4
09 апреля 2007 года
mike
3.7K / / 01.10.2002
Не слушай dolonet'а :)

1. Письмо может быть в любой кодировке, главное правильно указать ее в Content-Type
2. Subject должен быть закодирован в Quoted-Printable или Base64

Вот пример QP-кодирующей функции:

Код:
function qp_enc( $input = "", $line_max = 76, $space_conv = true ) {
 GLOBAL $LANG;
   $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
   $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
   $eol = "?=\r\n\t";
   $escape = "=";
   $output = "";
   $charset = "=?".$LANG["charset"]."?Q?";
       while( list(, $line) = each($lines) ) {
               $linlen = strlen($line);
               $newline = "";
               for($i = 0; $i < $linlen; $i++) {
                       $c = substr( $line, $i, 1 );
                       $dec = ord( $c );
                       if ( ( $i == 0 ) && ( $dec == 46 ) ) {
                               $c = "=2E";
                       }
                       if ( $dec == 32 ) {
                               if ( $i == ( $linlen - 1 ) ) {
                                       $c = "_";
                               } else if ( $space_conv ) {
                                       $c = "_";
                               }
                       } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) {
                               $h2 = floor($dec/16);
                               $h1 = floor($dec%16);
                               $c = $escape.$hex["$h2"].$hex["$h1"];
                       }
                       if ( (strlen($newline) + strlen($c)) >= $line_max ) {
                               $output .= $charset.$newline.$eol;
                               $newline = "";
                               if ( $dec == 46 ) {
                                       $c = "=2E";
                               }
                       }
                       $newline .= $c;
               } // end of for
               $output .= $charset.$newline.$eol;
       } // end of while
       return trim(str_replace("\r\n","\n",$output));
}
239
09 апреля 2007 года
Dolonet
1.7K / / 20.05.2000
Майк, я как раз спрашивал к тому, не в UTF-8 ли у него и заголовок :)
13K
09 апреля 2007 года
4айник
40 / / 23.12.2006
Ребята, посмотрите на мой ник - 4айник!!! Я его сам себе выбрал, потому что только учусь РНР!!!
Итак...
У меня есть файл РНР, отвечающий за отправку письма. Написан в стандартном виндозном блокноте. Кодировка всего файла - UTF-8.
В нём написано:
<?php

$subject="Привет от меня!";
$mail = "ххх@mail.ru";
$message = "Тестовое сообщение";

$headers_abon = "From: [email]admin@ххх.ru[/email]\n";
$headers_abon .="X-Mailer: PHP/" . phpversion();
$headers_abon .="MIME-Version: 1.0\n";
$headers_abon .="Content-Type: text/plain; charset=utf-8\n";
$headers_abon .="Content-Transfer-Encoding: 8bit";

$send_abon = mail($mail, $subject, $message, $headers_abon);

?>
Вот полный листинг кода-файла в кодировке UTF-8.
Где я ламер?!
Господа, не пинайте меня... Я учусь... Прошу помочь... Пожалуйста!!!

З.Ы.: Виндозный русский outlook тоже понимает тему (см. п.выше), а все остальное - The Bat (русс), ww.mail.ru и проч. почт. серверы пишут ???? либо поле ТЕМА пустая...
13K
09 апреля 2007 года
4айник
40 / / 23.12.2006
Гуру!!! Уважаемые гуру!!!
Помогите, прошу Вас!!!
Очень прошу!!!
29K
13 июля 2007 года
sergei-nko
11 / / 13.07.2007
Цитата: 4айник
Гуру!!! Уважаемые гуру!!! Помогите, прошу Вас!!! Очень прошу!!!



4айник, вы, наверное, уже разобрались в проблеме. может, поделитесь своим решением ?

И еще, коллеги, когда говорите о проблемах с письмами, то кроме примера кода обязательно публикуйте заголовки письма (headers) - по ним гораздо проще разобраться в проблеме, чем по исходникам программы, их генерируещей.

13K
13 июля 2007 года
4айник
40 / / 23.12.2006
Не-а. Проблема открыта.. Приходится писать и по-русски, и латиницей...
Проблемы очень сильные, особенно, если почтовый сервер иностранцев работает по 7bit шифрованию.
29K
13 июля 2007 года
sergei-nko
11 / / 13.07.2007
Мы давно не слышали о проблемах с кодировками. Единичные случаи бывают, но 99% нормально читает utf-8 - его поддерживают и веб-почта, и почтовые сервера, и почтовые клиенты уже несколько лет.
Может быть, вы что-то не так оформляете в заголовках ?
Покажите заголовки письма.
Можно в аську 46297588
7.8K
13 июля 2007 года
Tingo
201 / / 17.05.2007
$subject="=?UTF-8?B?".base64_encode($subject)

Может что-то упустил...
29K
13 июля 2007 года
sergei-nko
11 / / 13.07.2007
Оргвопрос: эта тема оказалась слишком старой, и на меня уже наехали в соседней ветке за подъем старых тем. Так что дальше наверное лучше в приватном режиме общаться - по почте или через "личные сообщения".
Или модераторы разрешат здесь продолжить ?


По твоему коду base64_encode($subject) ничего точно нельзя сказать.
Если в $subject у тебя лежит текст не в utf-8, это конечно будет причиной проблемы. Еще может быть проблема с длиной строки.

Покажи сгенерированное письмо полностью. Или хотя бы заголовки. На коды будем смотреть потом.
27K
14 июля 2007 года
антигерой
7 / / 14.07.2007
Попробуй сконвертить ТЕМУ.
Подходящие Команды:

iconv();
mb_convert_encoding();

Проверь - все ли поля идут в правильной кодировке.

Обрати внимание на надпись Subject в заголовке писем.
Вот к примеру я сейчас дёрнул строку у себя в зебате из письма:
Subject: =?windows-1251?q?=C4=EE=E1=F0=EE_=EF=EE=E6=E0=EB=EE=E2=E0=F2=FC_=ED=E0_CodeNet_Forum!?=

Реально написано в теме: Добро пожаловать на CodeNet Forum!
Я смотрю: Д=C4, о=EE, б=E1, р=F0
Вот и ищи, как конвертнуть(дать в хедер) UTF-8 кодировку.

Просто отправь себе письмо в кодировке UTF-8 каким-неть почтовиком и раскопай его заголовок. Всё сразу станет понятно.
9.0K
17 июля 2007 года
Toxin_F
93 / / 03.01.2007
Цитата:
Попробуй сконвертить ТЕМУ


2: 4айник
Во-во, юзай mb, у меня тож такая проблема была когда-то.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог