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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Теперь с MIME не могу разобраться 28.12.04 00:26  Число просмотров: 2407
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
Пробовал заменять все символы на "=XX", где XX - шестнадцатеричный код, однако такую форму Аутлук не воспринимает - выводит всё как есть.

Тогда применил библиотеку Perl Encode::MIME - при кодировании MIME-Q почтовая программа не может вообще отобразить заголовок, а при остальных (MIME-B и MIME-Header) отображается следующая ерунда: "ÔÅÓÔÏ×ÏÅ ÐÉÓØÍÏ". Что делать не знаю.
<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: 0 s   Design: Vadim Derkach