Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: mail > forum


  • Subject: Re: lug-bg: mail > forum
  • From: Peter Pentchev <roam@xxxxxxxxxxx>
  • Date: Fri, 25 Jun 2004 16:40:51 +0300

On Fri, Jun 25, 2004 at 03:45:18PM +0300, Ivajlo Josifov wrote:
> Здравейте група, 
> 
> Пиша Ви за 1ви път.
> Понеже останах с впечатлението, че всички се познавате ще кажа 2 думи за себе си...
> казвам се Ивайло Йосифов; фен съм на линукс; занимавам професионално
> от около година; администрирам няколко сървъра; чета ви от известно
> време и аплодирам идеята.
> 
> Правя сайт на малка фирмичка, в който има и форум. Хората пожелаха да
> направя възможно с изпращането на имейл към forum@xxxxxxxx
> съдържанието на имейла да попада във форума. Реализирах го, но почти.
> Ще обесня за да бъда по-ясен a и за тези, на които им е интересно:
> 1. пристига имейл до forum@xxxxxxxx
> 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	roam@xxxxxxxxxxx    roam@xxxxxxxx    roam@xxxxxxxxxxx
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.

Attachment: pgpYD5gNrOxxF.pgp
Description: PGP signature



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.