Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодировка почтового сообщения 
V
    Опции темы
bars80080
Дата 19.1.2010, 17:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



возникла заморочка и что-то в голову пока никак не приходит решение

система такая:
первый пользователь заполняет форму и жмёт кнопку отправить, данные формы записываются в БД, затем отыскивается выбранный пользователь и на его почтовый ящик шлётся письмо извещение, что ему надо заглянуть на сайт

вроде просто.
текст пребывает в кодировке win-1251, а отсылается с помощью такой вот функции:
Код

    function smail($email = '',$subj = '',$body = '', $userTo = '', $from = '') {
        if(!empty($from)) { $fromS = convert_cyr_string($from, 'w', 'k'); }
        else { $fromS = convert_cyr_string($_SESSION['HTTP_HOST'], 'w', 'k'); }
        $bodyS = convert_cyr_string($body, 'w', 'k');
        $subjS = convert_cyr_string($subj, 'w', 'k');
        $headers = 'From: <'.$fromS.">\n";
        $headers .= 'X-Sender: <'.$userTo.">\n"; 
        $headers .= "X-Mailer: PHP\n"; // mailer
        $headers .= "X-Priority: 1\n"; // Urgent message!
        $headers .= 'Return-Path: <'.$userTo.">\n";  // Return path for errors
        $headers .= "Content-Type: text/plain; charset=\"KOI8-R\"\n";  // Return path for errors
        if(mail($email, $subjS, $bodyS, $headers)) { return 1; }
        else { return 0; }
    }


и тут у нас возникает усложнение (хотя вроде должно было быть упрощение). хост, на котором всё это крутится, помимо отсылки почтовых сообщений даёт ещё возможность пользоваться своими собственными почтовыми ящиками. то есть, если адрес сайта site.ru, то мы имеем почтовые ящики [email protected], [email protected] и т.д. а пользователи пользующиеся этой системой, как раз имеют эти самые почтовые ящики.

админы поставили промежуточный сервак у нас в конторе и настроили его так, что внутренняя почта (с [email protected] на [email protected]) идёт через него и не далее. то есть до сервера site.ru письма не доходят.

и вот тут начинается мистика. письма с внутреннего адреса на внутренний или внешний доходят нормально. внешние письма до внутреннего адреса доходят тоже нормально. теперь же я отправляю программно письмо-извещение из пхп с site.ru на внешний адрес (допустим [email protected]) - тоже всё нормально, но если на внутренний ([email protected]), то кодировка ломается /видимо, где на промежуточном сервере/

админы, в виду того что обмен почтой на всех направлениях идёт нормальный - отсылают меня с формулировкой: это что-то у тебя не клеится. а я мягко говоря даже не знаю, что копать

вид кракозябр приходящих на внутренний адрес:
Цитата
÷ÁÓ ÐÒÉ×ÅÔÓÔ×ÕÅÔ ÓÌÕÖÂÁ ÒÁÓÓÙÌËÉ ÓÉÓÔÅÍÙ ÄÏËÕÍÅÎÔÏÏÂÏÒÏÔÁ

пытался жёстко прописать заголовок, навроде: 
Код
$subjS = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subj,"w","k")).'?=';

не помогает

если отсылать писбмо в виде html в кодировке win-1251
Код

    function my_mail($to, $sub, $text, $from = '') {
        if(empty($from)) { $from = $_SERVER['HTTP_HOST']; }
        $header = 'Content-type: text/html; charset=windows-1251 '."\n";
        $header .= 'From: '.$from."\n";
        $header .= 'Subject: '.$sub."\n";
        $header .= 'Content-type: text/html; charset=windows-1251 '."\n";
        $fg = @mail($to, $sub, $text, $header);
        return $fg;
    }

, то на внешний адрес приходит нормально, а на внутренний заголовок в виде кракозябр, а само письмо в виде прикреплённого файла. открываешь файл - внутри нормальное, но сам факт выдирания текста из письма смотрится дико.

если пхп тут дело не поправить, то куда смотреть?
PM MAIL WWW   Вверх
bars80080
Дата 20.1.2010, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ух-ты, кто-то молча со мной не согласился. вопрос только в чём?


это конечно какие-то заморочки с промежуточным сервером, но ответственность с меня не снимают.
сейчас отправил с помощью выше упомянутых двух функций письма со стороннего хоста. так что письма по-любому являлись внешними.
те что прошли через промежуточный сервер вновь подверглись перекодировке. в то время как обычные письма, отправляемые людьми со своих клиентов доходят нормально. значит, всё же я чего-то в этих функциях не дописываю
PM MAIL WWW   Вверх
bars80080
Дата 20.1.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



мда, накидал короче кучу заголовков самых разных и закодировл в base64, вроде заработало. 

на досуге надо будет поковыряться
PM MAIL WWW   Вверх
Ипатьев
Дата 20.1.2010, 13:28 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(bars80080 @  19.1.2010,  17:37 Найти цитируемый пост)
÷ÁÓ ÐÒÉ×ÅÔÓÔ×ÕÅÔ ÓÌÕÖÂÁ ÒÁÓÓÙÌËÉ ÓÉÓÔÅÍÙ ÄÏËÕÍÅÎÔÏÏÂÏÒÏÔÁ

это latin1
смотреть надо не "кракозябры", а заголовки. Клиент перекодирует текст в соответствии с заголовками.

вы все почему-то никогда не смотрите на результаты своих действий
только и видно - "я выставил права на файлы!", "я задал кодировку" "я делал то, я сделал сё". 
Но при этом никто никогда не проверяет - а каков был результат операции. Получили ли мы то, что хотели?

Мы посылаем письмо. С некоторыми заголовками и в некоторой кодировке. Мы получили письмо. почему же мы не смотрим, в какой оно сейчас кодировке и с какими заголовками? А типо пялимся на экран, на котором почтовая программа выдает нам результат своих каких-то вычислений?

заголовок сообщения недо не "пытаться" "жестко прописывать", а с самого начала правильно кодировать. 
При этом, разумеется, сначала разобраться с кодировками, убедиться, что все еодируется правильно и раскодируется ДО отправки.
После этого поотправлять и посмотреть на результат.

Добавлено через 3 минуты и 55 секунд
Но опять же - смотреть результат не в почтовой программе, как она его показыает, а хидер в письме. поменялся он? Не поменялся? Если не поменялся, то показывает ли его программа правильно? Если неправильно, то посмотреть, какая кодировка выставлена в настройках клиента. Поменять на нужну. посмотреть.

При этом надо, естественно, проводить исследования аккуратно, не смешивая одно с другим, и по четкому плану. А не "я пробовал то, я пробовал сё". Причем это совсем не специальный программистский навык. Этому учет в школе на лобьораторной работе. Но в результате, почему-то, вместо планомерного изучения мы в итоге имеем "накидал короче кучу"...

PM MAIL   Вверх
bars80080
Дата 20.1.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Ипатьев @  20.1.2010,  12:28 Найти цитируемый пост)
Мы получили письмо. почему же мы не смотрим, в какой оно сейчас кодировке и с какими заголовками? А типо пялимся на экран, на котором почтовая программа выдает нам результат своих каких-то вычислений?

ага именно так. пялюсь в оутлук, а куда ещё смотреть - не известно. оутлук показывал западноевропейскую кодировку, ISO вроде, но при зимении на любую другую менялся только шрифт и не более, сами буквы оставались те же.

отправка была корректна всегда, о чём вроде писал. хотя куда смотреть апосля функции mail - не знаю.
с приёмом, собственно, вот этот вопрос
Цитата(bars80080 @  19.1.2010,  16:37 Найти цитируемый пост)
если пхп тут дело не поправить, то куда смотреть? 

 и был: куда смотреть, чтобы увидеть?
в том же оутлуке переклацал все закладки, нашёл одну графу "заголовки", но там всегда было пусто. у корректных и не корректных писем

Цитата(Ипатьев @  20.1.2010,  12:28 Найти цитируемый пост)
Этому учет в школе на лобьораторной работе

сказки об идеальном учении. как правильно делать лабораторные мы допёрли сами только к 4-ому курсу. ни в школе, ни в вузе до этого никто вразумительно не объяснял. нате методичку - читайте, выполняйте

PM MAIL WWW   Вверх
Ипатьев
Дата 20.1.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



MS Outlook, к сожалению, самый неудачный из всех возможных клиентов. Полный источник письма он не показывает. Но хотя бы заголовки в свойствах письма посмотреть можно. 
Имеет смысл настроить на том же компе Outlook Express для тестов - там можно смотреть исходник письма целиком.

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

PM MAIL   Вверх
bars80080
Дата 20.1.2010, 15:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Simpliest @  20.1.2010,  14:42 Найти цитируемый пост)
Я не могу смотреть на деградацию. 

закрой глаза и представь, что ты в невесомости. если сумеешь сконцентрироваться на дыхании и представить, что тебя покачивает на волнах - то очень быстро успокоишься



Цитата(Ипатьев @  20.1.2010,  14:49 Найти цитируемый пост)
Но хотя бы заголовки в свойствах письма посмотреть можно. 

нету. из-под оутлука ничего увидеть не смог. а где искать на компе - не знаю.

Цитата(Ипатьев @  20.1.2010,  14:49 Найти цитируемый пост)
просто посмотреть - что там накодировалось в итоге, какой текст уходит в белый свет?

воооот, как же это просто сделать? через ob_* всякие?

Цитата(Ипатьев @  20.1.2010,  14:49 Найти цитируемый пост)
об этом был смысл моего повествования: мы пишем тонны пхп кода, но очень слабо представляем себе, какой он должен выдавать результат. 

есть такое. но не спросил бы, точно бы ничего не узнал. правда, пока я всё равно ничего не узнал

Это сообщение отредактировал(а) skyboy - 20.1.2010, 19:55
PM MAIL WWW   Вверх
sTa1kEr
Дата 20.1.2010, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(bars80080 @  20.1.2010,  16:58 Найти цитируемый пост)
воооот, как же это просто сделать? через ob_* всякие?

Код

var_dump($text, $header);


Всегда кодируйте заголовки (Subject, From, etc) при помощи Quoted-Printable или Base64 (первое предпочтительнее). Проще всего это сделать при помощи mb_encode_mimeheader() или iconv_mime_encode().
Так-же не забывайте про заголовок Content-Transfer-Encoding, в вашем случае он будет иметь значение 8bit.
И если у вас нет возможности поставить нормальный почтовый клиент, что бы посмотреть оригинальный текст письма, то воспользуйтесь http://php.net/imap

Это сообщение отредактировал(а) sTa1kEr - 20.1.2010, 16:54
PM MAIL   Вверх
bars80080
Дата 20.1.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(sTa1kEr @  20.1.2010,  15:18 Найти цитируемый пост)
var_dump($text, $header);

нет, текст того что я насобирал перед вставкой в mail(), понятное дело смотрел. и было там всё хорошо (в смысле, как обычно). я так понял, Ипатьев говорил о прочтении того, что исходит от сервера после исполнения функции mail(). это как посмотреть?

Это сообщение отредактировал(а) skyboy - 20.1.2010, 19:54
PM MAIL WWW   Вверх
skyboy
Дата 20.1.2010, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260




 ! 
skyboy
bars80080, Simpliest, товарищи, разбирайтесь в ЛС. Что бы ни было причиной.

PM MAIL   Вверх
sTa1kEr
Дата 21.1.2010, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(bars80080 @  20.1.2010,  19:32 Найти цитируемый пост)
я так понял, Ипатьев говорил о прочтении того, что исходит от сервера после исполнения функции mail(). это как посмотреть?

А после исполнения mail() ничего интересного не происходит (если только не включен mbstring.overload ), все данные, как контент, так и заголовки mail() просто скармливает sendmail'у.

Но если очень-очень интересно, то посмотреть можно. Для этого достаточно написать простенький скрипт, который будет просто читать данные из STDIN и писать их в файл. И прописать путь к этому скрипту в sendmail_path

Это сообщение отредактировал(а) sTa1kEr - 21.1.2010, 00:32
PM MAIL   Вверх
bars80080
Дата 21.1.2010, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(sTa1kEr @  20.1.2010,  23:20 Найти цитируемый пост)
А после исполнения mail() ничего интересного не происходит (если только не включен mbstring.overload ), все данные, как контент, так и заголовки mail() просто скармливает sendmail'у.

тогда я не понимаю о чём шла речь. там ведь (в этих двух функциях) и прятаться то нечему. адрес да пару строк обычного текста.
получается проверил и со стороны передачи и со стороны приёма (насколько позволяли возможности)

значит, будем поочереди отключать заголовки, смотреть, что вызывает отрицательную реакцию
PM MAIL WWW   Вверх
Ипатьев
Дата 21.1.2010, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(bars80080 @  21.1.2010,  01:27 Найти цитируемый пост)
и со стороны приёма 

лично я не видел проверки.

Я думаю, имело бы смысл опубликовать здесь два исходника письма - отправленный и полученный.
Тогда будет, о чем говорить
PM MAIL   Вверх
bars80080
Дата 21.1.2010, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



полученный я уже говорил - оутлук ничего не показывает, а кракозябры показал

отправленный нарою завтра
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.