информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медЗа кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Когда я кодирую с помощью Encode::MIME в режиме B он выдаёт... 31.12.04 16:18  Число просмотров: 2371
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Когда я кодирую с помощью Encode::MIME в режиме B он выдаёт такое:
=?UTF-8?B?w5TDhcOTw5TDj8OXw4/DhSDDkMOJw5PDmMONw48=?=
В редиме Q такое:
=?UTF-8?Q?=D4=C5=D3=D4=CF=D7=CF=C5=20=D0=C9=D3=D8=CD=CF?=

В общем-то я вроде как понял в чём ошибка - у меня должно быть не UTF-8, а KOI8-R, однако сейчас проверить не смогу - хостинг "поздравил с НГ" - ушёл праздновать, а в это время его сервера вдруг перестали отвечать. Уже второй день не могу достучаться. Т. к. на домашнем компе никакого почтового сервера не стоит (и сендмыла тоже), временно проверить работоспособность не в состоянии. Так что уже только в 2005ом смогу хоть что-то проверить.

Спасибо за помощь.
<beginners>
Глупые вопросы о почте 24.12.04 00:41  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Засел тут за написание скрипта почтовых рассылок (письма шлю сендмылом) и возник ряд вопросов.

1. Если я шлю письмо в формате text/html, то нужно ли мне указывать и имеют ли какую-нибудь силу теги HTML, HEAD, BODY и прочие подобные.

2. Имеет ли значение, в какой кодировке отправлять письма, в koi или win? При условии того, что я явно прописываю кодировку в заголовках.

3. Не то что бы мне это нужно, просто интересно стало. Если я шлю письмо с аттачментом, где само тело письма в формате HTML, то я ведь как-то могу в самом теле обращаться к вложениям, то есть, например, вставлять <img src="xxx">, где xxx - путь до аттачмента. Интересно как это сделать.
Всё заработало, осталось только немного уточнить 06.01.05 22:42  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Отпправляю почту я примерно таком кодом:

#!/usr/bin/perl
use POSIX;

$subj='фЕУФПЧПЕ РЙУШНП';
$subj=~s/([^\w])/sprintf("=%02X",ord($1))/ge;
$subj='=?KOI8-R?Q?'.$subj.'?=';

$time=gmtime();
$time=~s/^(\w+)/$1,/;

open MAIL,"usr/sbin/sendmail heller\@mail.ru";
print MAIL "Subject: $subj\n";
print MAIL "Content-Type: text/plain; charset=koi8-r\n";
print MAIL "To: <heller\@mail.ru>\n";
print MAIL "From: Heller <heller\@heller.ru>\n";
print MAIL "Date: ".$time."\n\n";
print MAIL "еУМЙ РЙУШНП ДПЫМП ХУРЕЫОП, ЪОБЮЙФ ЛПД ТБВПФБЕФ";

close MAIL;


Всё работает замечательно, однако по поводу MIME мучают сомнения - всё ли правильно я делаю. Кодировку в MIME я делаю так:

$subj=~s/([^\w])/sprintf("=%02X",ord($1))/ge;

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

И ещё два оффтопных вопроса по этому же коду. Во-первых, из модуля POSIX мне требуется всего одна функция gmtime(), однако подключить её в одиночку как use POSIX 'gmtime' не удаётся - вопит об ошибке. Вроде бы как такого быть не должно - даже если в ней вызываются методы класса, а других причин я не вижу.

Второе - если сразу после моей кодировки в MIME (выше) я распечатываю содержимое $1, то на экран мне выводится не последний символ, как должно было бы быть, а что-то вообще непонятно откуда берущееся. Например, для этого кода получается символ 'ю' (если в виндовой кодировке - в кои8 получается вообще что-то страшное). Как я выяснил, этот самый символ из $1 зависит только от последнего символа в преобразуемой строке, однако как именно он зависит и почему он получается не ясно. Хотя это уже просто любопытство - особой нужды разбираться нет. Основной вопрос про MIME.

Всем спасибо за ответы.
пробую уточнить 11.01.05 22:18  
Автор: LLL <Алексей> Статус: Member
<"чистая" ссылка>
> Отпправляю почту я примерно таком кодом:
>
> #!/usr/bin/perl
[... немного исходника выкинуто для краткости...]
> print MAIL "Date: ".$time."\n\n";

Обычно записываю такое чуть проще:
print MAIL "Date: $time\n\n";

[... тут тоже...]
>
>
> Всё работает замечательно, однако по поводу MIME мучают
> сомнения - всё ли правильно я делаю. Кодировку в MIME я
> делаю так:
>
> $subj=~s/([^\w])/sprintf("=%02X",ord($1))/ge;
> Всё ли здесь учтено? Может быть по стандарту есть какие-то
> частные случаи, которых я не учёл - тогда просьба
> поправить.

Тут есть риск наколоться при использовании setlocale при возможном развитии проги.
\w будет в кириллической локали считать русские буквы обычными, поэтому они не будут закодированы.
Я бы предпочел готовое решение, чем руками что-то кодировать, не зная тонкостей стандартов.
К сожалению, Encode::MIME у меня сейчас отсутствует, чтобы заценить, как оно работает, но зато есть MIME::Base64
Соответственно можно сделать так:
$subj = "=?koi8-r?B?" . MIME::Base64("исходная строка в КОИ8-Р") . "?=";

> И ещё два оффтопных вопроса по этому же коду. Во-первых, из
> модуля POSIX мне требуется всего одна функция gmtime(),
> однако подключить её в одиночку как use POSIX 'gmtime' не
> удаётся - вопит об ошибке. Вроде бы как такого быть не
> должно - даже если в ней вызываются методы класса, а других
> причин я не вижу.

Тут сам не понял, в чем дело, но ругается gmtime(), что ее надо звать со временем в качестве аргумента.
gmtime(time()) у меня прокатил.
При использовании модуля POSIX целиком видимо каким-то образом раскрываются дополнительные режимы вызова gmtime, но как их заставить проявиться, не подключая POSIX целиком, не знаю.
А вот теперь пошли проблемы 26.12.04 20:03  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Видимо, что-то я в заголовках не прописываю. Вот такой простейший код отправляет мне на почту тестовое письмо:

open(MAIL,"usr/sbin/sendmail heller\@heller.ru");
print MAIL "Subject: тестовое письмо\n";
print MAIL "From: Heller.Ru <heller\@heller.ru>\n";
print MAIL "content-type: text/html; charset=koi8-r\n\n";
print MAIL "если тестовое письмо дошло, то всё хорошо";
close MAIL;

Всё работает замечательно, но вот многие фильтры, например, mail.ru, расценивают такое письмо как СПАМ. Что с этим делать не знаю. Есть подозрения, что я заголовки пишу неправильно/не все. На RFC времени нехватает, к сожалению, поэтому и пишу сюда. Может быть, кто ссылку кинет, где обо всём этом написано кратко или пальцем в ошибку ткнёт.

Заранее благодарен.
замечания 27.12.04 12:14  
Автор: LLL <Алексей> Статус: Member
Отредактировано 27.12.04 12:26  Количество правок: 2
<"чистая" ссылка>
> Видимо, что-то я в заголовках не прописываю. Вот такой
> простейший код отправляет мне на почту тестовое письмо:
>
> open(MAIL,"usr/sbin/sendmail heller\@heller.ru");
> print MAIL "Subject: тестовое письмо\n";

RFC то ли запрещает, то ли не рекомендует использовать в заголовках символы не из ascii7, т.е. кириллицу в полях заголовка надо кодировать по MIME.

> print MAIL "From: Heller.Ru <heller\@heller.ru>\n";
> print MAIL "content-type: text/html; charset=koi8-r\n\n";

Обычно почтовые клиенты пишут названия этого поля так: Content-Type (т.е. обе начальные буквы заглавные).
Неплохо бы еще поле "To:" указать в заголовке.

Не знаю, обязательно ли это, т.к. в принципе не люблю html-письма, надо ли html оформлять по полной программе, но, взглянув на пример письма от OE 6, увидел там в начале тэги <!DOCTYPE ...> <HTML>
Теперь с MIME не могу разобраться 28.12.04 00:26  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Пробовал заменять все символы на "=XX", где XX - шестнадцатеричный код, однако такую форму Аутлук не воспринимает - выводит всё как есть.

Тогда применил библиотеку Perl Encode::MIME - при кодировании MIME-Q почтовая программа не может вообще отобразить заголовок, а при остальных (MIME-B и MIME-Header) отображается следующая ерунда: "ÔÅÓÔÏ×ÏÅ ÐÉÓØÍÏ". Что делать не знаю.
Вот тебе пример MIME: 31.12.04 08:59  
Автор: Del Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Пробовал заменять все символы на "=XX", где XX -
> шестнадцатеричный код, однако такую форму Аутлук не
> воспринимает - выводит всё как есть.
>
Вот тебе пример MIME:

Subject: =?koi8-r?Q?=57indows=209x/2000/=4E=54/=58=50.=20=F7=CF=D0=D2=CF=D3=D9=20?=
 =?koi8-r?Q?=C9=20?=
 =?koi8-r?Q?=CF=D4=D7=C5=D4=D9?=
MIME-Version: 1.0
Content-Language: ru
Content-Type: text/html; charset="koi8-r"
Content-Transfer-Encoding: 8bit

---
Когда я кодирую с помощью Encode::MIME в режиме B он выдаёт... 31.12.04 16:18  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Когда я кодирую с помощью Encode::MIME в режиме B он выдаёт такое:
=?UTF-8?B?w5TDhcOTw5TDj8OXw4/DhSDDkMOJw5PDmMONw48=?=
В редиме Q такое:
=?UTF-8?Q?=D4=C5=D3=D4=CF=D7=CF=C5=20=D0=C9=D3=D8=CD=CF?=

В общем-то я вроде как понял в чём ошибка - у меня должно быть не UTF-8, а KOI8-R, однако сейчас проверить не смогу - хостинг "поздравил с НГ" - ушёл праздновать, а в это время его сервера вдруг перестали отвечать. Уже второй день не могу достучаться. Т. к. на домашнем компе никакого почтового сервера не стоит (и сендмыла тоже), временно проверить работоспособность не в состоянии. Так что уже только в 2005ом смогу хоть что-то проверить.

Спасибо за помощь.
хотелось бы посмотреть на кодированный фрагмент 29.12.04 21:07  
Автор: LLL <Алексей> Статус: Member
<"чистая" ссылка>
ответить в следующий раз могу не скоро, т.к. в предстоящие праздники буду не в инете
проще всего посмотреть на оформление письма, которое отсылает типовой клиент 24.12.04 09:39  
Автор: LLL <Алексей> Статус: Member
<"чистая" ссылка>
хоть тот же M$ OE, например
не так всё просто 25.12.04 00:56  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Outlook не хочет показывать сам код письма, а если сохранять письмо в отдельный файл, то формат там уже явно другой - с кучей майкрософтовских примесей. На сервере почта хранится хоть и в текстовом формате, но тоже не в точности, как она была переправлена.

Вообще мой Outlook вполне понимает и разные кодировки и письма в формате html без всяких тегов типа HTML - всё проходит нормально. Однако это майкрософт. А хотелось бы знать стандарты - что бы всё нормально было на всех клиентах.
Поюзай Outlook Express — он и сохраняет в *.eml (чисто то, что пришло), и показывает полный текст любого письма. 05.01.05 09:01  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
ну возьми другой почтовый клиент ;) 25.12.04 11:57  
Автор: fly4life <Александр Кузнецов> Статус: Elderman
Отредактировано 25.12.04 12:37  Количество правок: 1
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach