Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
| | | |
Вот тебе пример MIME: 31.12.04 08:59 Число просмотров: 2532
Автор: 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
---
|
<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
|
|
|
|