On Fri, Jun 25, 2004 at 03:45:18PM +0300, Ivajlo Josifov wrote: > Здравейте група, > > Пиша Ви за 1ви път. > Понеже останах с впечатлението, че всички се познавате ще кажа 2 думи за себе си... > казвам се Ивайло Йосифов; фен съм на линукс; занимавам професионално > от около година; администрирам няколко сървъра; чета ви от известно > време и аплодирам идеята. > > Правя сайт на малка фирмичка, в който има и форум. Хората пожелаха да > направя възможно с изпращането на имейл към [EMAIL PROTECTED] > съдържанието на имейла да попада във форума. Реализирах го, но почти. > Ще обесня за да бъда по-ясен a и за тези, на които им е интересно: > 1. пристига имейл до [EMAIL PROTECTED] > 2. задейства се .qmail скрипт стоящ в > /home/vpopmail/domains/sait/forum/.qmail със следното съдържание: > |preline /scripts/m2forum.sh ## bash скрипт, който взема тялото, > субджекта, подателя и датата на имейла и прави запис в mysql база в > съответните полета. > > Ето и проблема: > Когато изпращам писма до спомантия акаунт на латиница всичко е > тип-топ, но когато изпратя на кирилица се появяват маймунки. Знам че > става въпрос за декодване, което btw. не ми е много ясно... Реших че > мога да погледна все пак при Squirrel mail как е реализирано, но се > оплетох в PHP скриптове, които не разгадах и в крайна сметка си > загубих времето... >
> Има ли някакъв хитър начин да декодвам през bash скрипт, perl или php? > Някаква команда, функция или нещо вече написано.... Всъщност основното, което трябва да направиш, е да намериш малко информация за MIME - Multipurpose Internet Mail Extensions. Едно от хубавите места за четене са самите RFC-та, от 2045 до 2049: http://www.faqs.org/rfcs/rfc2045.html http://www.faqs.org/rfcs/rfc2046.html http://www.faqs.org/rfcs/rfc2047.html http://www.faqs.org/rfcs/rfc2048.html http://www.faqs.org/rfcs/rfc2049.html Но всъщност има и доста други места, на които можеш да попрочетеш за това какво е MIME и как се обработват такива съобщения. През shell script едва ли ще стане. За Perl имаш купчина модули, които се занимават с това: мога да ти препоръчам MIME::Tools, които инсталират куп модули като MIME::Parser, MIME::Entity, MIME::Body и още два-три, които едва ли ще ти трябват. MIME::Parser се справя достатъчно добре с разбиване на multipart съобщение на съставните му части и след това представяне на тези части така, че да можеш да ги използваш... с пълна информация за encodings :) Има и други варианти, примерно Simon Cozens има интересни модулчета Email::Simple, Email::Attachment и т.н., само че още не съм си играл достатъчно с тях и не мога да дам мнение. Иначе, след като си извадил самото съобщение от съответната MIME част, и след като си разбрал в какъв точно encoding е това съобщение, трябва да го обърнеш в енкодинга, който ще показваш във форума. Това може да стане с модулите от групата Encode или, ако ползваш достатъчно нова версия на Perl, с модулчето utf8 (ако, разбира се, решиш да представяш нещата във форума в UTF-8). > Още нещо... Koe e тялото на имейла? Tова което стои между Ами.. никое от изброените :) Тялото на самото e-mail съобщение е всичко, което е след хедъра (заглавката?). Самият хедър свършва с празен ред - т.е. всичко след първия празен ред е тяло на e-mail съобщението. Следващата стъпка е обработката на MIME multipart съобщения: тялото е едно, дефинирано от RFC 821/822, но в това тяло може да има повече от една част, MIME същност (entity). Типичен пример е мейл с един-два прикачени файла, или такъв, който е и в текстов вид, и в HTML, или пък такъв като този, който четеш в момента - с прикачен PGP подпис. Тогава в хедъра на мейла трябва да има Content-type: multipart/нещо-си (да, и тук има различни варианти, но в момента не те интересуват), а самото тяло на мейла да се състои от MIME parts като тези, които си показал. > ------=_NextPart_000_000D_01C45AC4.351EFE50 > Content-Type: text/plain; > charset="koi8-r" > Content-Transfer-Encoding: base64 Това е заглавката на първата част (MIME part) от съобщението; всичко между тези редове и следващата ------=_NextPart със същия код е текстова част от съобщението. > и това: > > ------=_NextPart_000_000D_01C45AC4.351EFE50 > Content-Type: text/html; > charset="koi8-r" > Content-Transfer-Encoding: quoted-printable Това е просто следваща част от съобщението :) И двете са части от тялото. В такива случаи - когато имаш и текстова, и HTML част - трябва да решиш коя ще показваш във форума. Аз бих предложил показване на текстовата част (ще имаш много по-малко проблеми с нормализиране и "изчистване" на HTML), и остава само да се надяваш да не попаднеш на някой хитрец, който да ти изпрати съобщение, при което текстът е в HTML частта, но отпред има текстова част от типа на "Твоят мейлър е прекалено тъп и не разбира от MIME съобщения; вземи си по-добър мейлър." Абе идиотиииииии, ако моят мейлър не разбираше от MIME съобщения, щях ли изобщо да чета това? :))) Това, което искате да кажете, е, че моят MUA не разбира от *HTML* съобщения, което дори не е вярно - той прекрасно си разбира, само че съм му обяснил, че не искам да ми ги показва :))) > или това което е затворено в > <body></body> > таговете по-надолу. Ъххх.. Ако имаш HTML част, не можеш да третираш нейното тяло (това, което е в <body> тага) като нещо различно и съвсем отделно от нейната заглавка, най-малкото защото в заглавката ще има много, ама много важна информация за.. таковата.. ами за енкодинга, в който е представено тялото :) Тук вече - ако решиш да показваш HTML частта - ще ти трябва и нещо, което да parse-ва HTML, да вади от него истинския текст, и да.. абе.. мрън.. ще ти трябва нещо от класа на браузър.. според мен по-добре обработвай текстовата част, а за съобщения, които имат само HTML част, ползвай нещо като 'lynx -dump' (мда, съвсем сериозно). > Посъветвайте ме как да продължа. > > Ако има някакво значение сървъра е qmail. > > Извинявам се за дългото писмо. Опитах се да бъда максимално ясен. Въх.. то моето излезе едно такова, малко по-дългичко май... Надявам се поне малко да проясни нещата :) Поздрави, Петър -- Peter Pentchev [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 This sentence would be seven words long if it were six words shorter.
pgp2xnMJCU9mK.pgp
Description: PGP signature
