OT: dotaz na konverzi CRLF behem prenosu mailu

Dan Lukes dan at obluda.cz
Tue Sep 28 03:13:35 CEST 2010


On 09/27/10 19:00, Jan Pechanec:
> 	narazil jsem na problem, ze z unixu odeslu pres Pine textovy soubor
> a clovek na druhy strane, taky na unixu, s ThunderBirdem, to ulozi a ma tam
> extra LF znaky.
>
> 	RFC 2046 rika: "The canonical form of any MIME "text" subtype MUST
> always represent a line break as a CRLF sequence."
>
> 	zjistil jsem, ze Pine vzdy zkonvertuje text tak, ze CR zmeni na
> CRLF. Vzhledem k vete nahore bych si rekl, ze dela spravnou vec. Tj.
> ThunderBird by to mel ulozit podle systemu, tj. na unixu odebrat LF. A to
> nedela.
>
> 	Pine ale navic vzdy na text pouzije base64, tj. az po prekodovani CR
> ->  CRLF. Ale to mi porad prijde OK. Vysvetleni proc dela encoding i na
> textovy soubory je tady:
>
> 	http://www.washington.edu/pine/faq/attachments.html
>
> 	muj dotaz: chova se podle specifikace spatne ThunderBird, nebo Pine?

Zadna specifikace o ktere tu byla rec nemluvi o tom, v jakem formatu si 
maji postu ukladat konkretni programy. Ty rikaji jak maji vypadat behem 
transportu. Takze at uz si program uklada maily jak chce, pokud je po 
sobe dokaze zase precist, tak je uklada spravne.

Ale to ses asi jen zeptal na neco trochu jinyho nez's chtel. Pro odpoved 
je ale podstatne jakym typem pine oznaci pripojeny soubor - neco jineho 
je text/plain, neco jineho je text/rfc822

Takze jsem si vyrobil textovy soubor obsahujici

CR\n
CRLF\r\n

a poslal jsme si ho jako attachment pomoci Alpine 2.00

Prislo toto:
...
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=a
Content-Transfer-Encoding: BASE64
...
Q1INCkNSTEYNDQo=

Coz je po dekodovani toto:

CR\r\n
CRLF\r\r\n

Soubor tedy byl pri prenosu zmenen - to je skutecnost nezavisla na 
programu, kterym se dosly email bude nasledne zpracovavat. Otazka, ktera 
zbyva je, zda byl zmenen tak, ze ma s ohledemna udany typ odlisny vyznam 
nez text puvodni. Protoze pokud ano, jde o "nedovolenou" zmenu, v 
opacnem pripade jde o zmenu sice mozna zbytecnou, presto vsak korektni.

Ta cast RFC 2046 kterou's citoval ta pojednava o tom, jak musi vypadat 
uz zakodovany attachment - a ten musi navenek splnovat pravidla pro 
puvodni klasicky non-MIME email - proto ta podminka. Pro nasi otazku je 
ale podstatna spis to jak vypada "vnitrek" attachmentu typu text/plain a 
to je tato pasaz:

(1)   text -- textual information.  The subtype "plain" in
       particular indicates plain text containing no
       formatting commands or directives of any sort. Plain
       text is intended to be displayed "as-is".

Klicove tam je to "displayed as-is" ja chapu tak, ze kdyz udelam na obou 
systemech 'cat a' respektive 'copy a con:' respektive jiny ekvivalentni 
prikaz podle konkretniho OS tak na obou uvidim totez. Samozrejme, ze na 
"prave" strane prikazu musi byt "us-ascii textova konzole". Pokud bych 
mel nejakou jinou (treba EBCDIC) musim text pro ucely zobrazeni 
prekodovat tak, aby se ve vysledku zobrazilo to, co se zobrazit ma.

No, zkusil jsem to jen na Windows XP a FreeBSD ale na tech to plati. 
Nakonec - CR (ASCII 0x0D) je ridici znak pozadujici presun kursoru na 
prvni pozici aktualniho radku a u toho by melo byt lhostejne ze ji misto 
jednou pozadujes dvakrat.

S LF (ASCII 0x0A) je to trochu slozitejsi, protoze tam existuji dve 
interpretace, ktere se shodnou, ze pozice se ma posunout o radek niz, 
ale neshodnou se, zda se pri tom soucasne ma kursor vratit na prvni 
pozici radku nebo ne

Pri nas pripad to ale neni podstatne - at pouzijeme jakoukoliv 
interpretaci, pridani libovolneho poctu CR pred LF by nemelo vysledne 
zobrazeni zmenit.

Muj zaver je tedy ten, ze:

a) dela zbytecnou transformaci, s ohledem na zvoleny typ ale prevadi 
jednu formu prilohy na jinou formu vyznamove ekvivalentni

b) thunderbird chybne implementuje "zobrazit "as-is" a to bud' proto, ze

ba) bud' do text zasahne sam a chybne, nebo tak, ze

bb) data zobrazuje na vystupni terminal, ktery neni US-ASCII a on, 
naopak, data pred tim nez je tam posle neupravi ac by mel (analogicky 
viz vyse zmineny EBCDIC priklad)

Thunderbird se z toho muze vyvleknout jen v pripade, ze by byla chyba v 
terminalu, ktery ma k dispozici - mel by byt ASCII, ale ma chybu a neni 
- v takovem pripade by samozrejme byla chyba v tom terminalu.

Mimochodem - ja thunderbird nemam, ale myslel jsem, ze seamonkey pouziva 
stejny renderer a ma jen jine UI - ale asi ne, protoze seamonkey mi 
pine-odeslany textovy dopis zobrazilo "spravnym" zpusobem - zadne divne 
znaky na konci radku videt nebyly.

No, na to, ze je to OT odpoved na OT otazku mi to vyslo neprimerene 
dlouhy ...

Dan



More information about the Users-l mailing list