Легенда:
   новое сообщение
    закрытая нитка
    новое сообщение
    в закрытой нитке
    старое сообщение
         
		 | 
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
 - Новичкам также крайне полезно ознакомиться с данным документом.
   
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners. 
  | 
проще всего посмотреть на оформление письма, которое отсылает типовой клиент  24.12.04 09:39  Число просмотров: 2714
 Автор: LLL <Алексей> Статус: Member
 | 
 
| 
хоть тот же M$ OE, например
 | 
 
| 
<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
 | 
 
| 
 | 
 
 
  
 
 | 
 |