Title back
Jaanuse asjad
Reklaam. Tehnoloogia. Meedia. Kasutajamugavus. Skype. Inimesed. Turvalisus. Keel. Kultuur. Valitsus. Privaatsus. Kommunikatsioon.

23. mai 2006

E-posti kodeeringud ja täpitähed

Kirjutas Jaanus kell 10:19 | Püsiviide

Tänases jutupliiatsi saates vaatame, kuidas tuleks korrektselt e-posti saata ja millised on tüüpilised vead, mida nii Eestis kui mujal selle saatmisel tehakse. Näitliku õppematerjalina kasutan kiire.ee posti, kus tüüpvead ilusti näha. Mitte et mul kiire.ee vastu midagi oleks — pigem vastupidi, nii nende sait kui ka konkreetne üritus räägivad pigem tegijate heast tahtest ja visioonist. Aga see e-kiri on lihtsalt nii armaste tüüpvigadega, et patt oleks see kasutamata jätta :-)

Niisiis sain eile neilt järgmise e-kirja. (Kõik pildid on klikitavad, kui tahad suuremalt näha.)

kiire_ee_email.png

Üritus iseenesest ju teretulnud, mine vaata lähemalt. Videotervitus on igati abiks. Pani mindki mõtlema, miks mitte oma toanurka jäänud kola sinna üles panna. Kõik see ei muuda aga olematuks fakti, et täpitähti näidatakse vigaselt.

Nimelt, kui vaadata teksti, siis ä-tähte näidatakse seal hoopis kui “ä” ja ü on “ü”. Milles asi? Asi väga lihtne, kui vaatame e-kirja lähteteksti. Thunderbirdis näiteks teed kirja eraldi aknasse lahti ja siis View -> Message Source. Outlookis ja Outlook Expressis saab ka seda teha.

kiire_ee_source.png

Siit on kohe näha, et kiri on saadetud “isetehtud” süsteemiga, mis topib kirja sisse minimaalselt päiseid. Kui üldse rääkida, kuidas e-kirjad üles ehitatud on, siis neil on alati kaks osa, päis ja keha. Päises on tehniline info kirja kohta, kehas aga tekst ise koos lisatud failide ja piltidega, olgu ta siis tavatekst nagu praegu või HTML või mõlemad. Ma tegin uduseks need päised, mis räägivad kirja liikumisteekonnast, kuna praeguse artikli kontekstis ei ole need olulised.

Põhimõtteliselt on kirja päise “käsitsi” oma süsteemis konstrueerimine igati OK, kui teada, kuidas seda teha. Jutuks oleva kiire.ee kirja puhul on olulisim puuduolev päis Content-type, mis näitab, mis kodeeringus on kirja sisu. Teatavasti on tänapäeval kasutatavaid märgisüsteeme üsna palju. Vanasti oli sellega veel rohkem kammi, sest polnud universaalset kodeeringut, mis kõiki märke toetaks, ja näiteks eesti ja vene teksti näitamine samal veebilehel oli jube piin. Tänaseks on välja mõeldud UTF-8, mis on päris jõhker imerelv ja rängalt lihtsustades võib öelda, et tuleb lihtsalt läbivalt UTF-8 kasutada ja märgiprobleemid võib unustada. kiire.ee sait kasutab ilusti korrektselt UTF-8 ja seda üritab teha seesama e-kiri. Kahjuks pole aga päises öeldud, et sisu tüüp on UTF-8, ja vastava märgendi puudumisel tõlgendavad e-posti programmid kirja sisu enamasti kui ISO-8859-1 ehk Latin1 kodeeringus olevat. Seetõttu ongi need “kriksatrullid” ä ja ü asemel.

Päisesse oleks tulnud ainult selline rida lisada ja sisuga oleks kõik korras olnud:

Content-type: text/plain; charset=utf-8

See aga pole veel kõik. Paraku. Siin on üks oluline viga veel, mis Thunderbirdis välja ei paista. Nimelt on subjekt (teema) jäetud üleüldse kodeerimata ja jällegi toorest UTF-8 kasutatud. Erinevalt kehast annab subjekti puhul Thunderbird selle andeks ja nagu ülalolevalt pildilt näha, näitab kõike, ka UTF-8 kasutavaid täpitähti õigesti. Paraku pole see nii ei Outlooki, Outlook Expressi ega ka näiteks veebimeilerite puhul, kus hea kavatsus saab ebakorrektse kodeeringu tõttu rikutud ja kasutajale vaatab kirjakastist ilusa teksti asemel vastu mingi läbu.

Outlook Express:

kiire_ee_outlookexpress.png

Outlook 2003:

kiire_ee_outlook2003.png

Veebipõhine meiliteenus (konkreetselt Squirrelmail):

kiire_ee_webmail.png

Mida siis teha? Asi lihtne. Juba vanarahvatarkus ütleb, et kui oma mõistus otsa saab, tuleb dokumentatsiooni lugeda. Internetis on täiesti olemas normdokumendid, mis räägivad, “kuidas asjad tegelikult on”. Neid kutsutakse RFC-deks, mis on lühend väljendist “Request for Comments”. Kuigi mitte-nii-kogenud arendajale võib tunduda, et RFC-d on liiga keerulised ja “häkkerite värk”, ei tee paha nendega tutvuda. Muidugi mitte kõigiga, sest paljud sisaldavad tõepoolest suht keerulist materjali. Aga konkreetselt e-posti rakendusi tehes kindlasti. Kätte saab neid mitmest kohast, ametlik allikas on RFC Editor. E-maili kehast räägib RFC 822 ja päiste kodeerimisest RFC 2047 ja põhimõtteliselt need kaks tükki ongi pea ainsad, mida vaja korrektse e-posti tekitamiseks jälgida.

RFC 2047 näitab ära suhteliselt lihtsa ja lollikindla mehhanismi, mille järgi saab nii e-kirja subjektis kui ka muudes päiseväljades (nt From, To jne) kasutada täpitähti, hieroglüüfe ja kõike muud, mis jääb standardsest US-ASCIIst väljapoole ja mida pole ka eriti keeruline teostada. Tuleb lihtsalt ära näidata märgistik (käesoleval juhul UTF-8), mida tekst kasutab, ja kogu värk kas Quoted-Printable või Base64 kodeeringuga ära kodeerida. Kuigi Base64 on inimesele keerulisem lugeda, on selle tekitamine nt PHP-s lihtsam. Käesoleval juhul näeks konkreetse päiserea tekitamine siis välja nii.

$subject_text = 'Kiire.ee heategevusnädal 28. Mai - 4. Juuni';
$subject = 'Subject: =?UTF-8?B?'.base64_encode($subject_text).'?=';

Lõpptulemus on sellel:

Subject: =?UTF-8?B?S2lpcmUuZWUgaGVhdGVnZXZ1c27
DpGRhbCAyOC4gTWFpIC0gNC4gSnV1bmk=?=

(See kõik peaks ühel real olema, panin käsitsi ühe reavahetuse sisse, et siia ära mahuks)

Hirmus läbu, eks? Aga kuna ka meiliprogrammid on kirjutatud neidsamu RFC-sid järgides, siis suudavad nad selle värgi ilusti lahti võtta ja ka täpikuid näidata.

Üks lõppmärkus veel meilide kohta, mille olen ise kogemuste najal ära õppinud. Nimelt ei kiputa e-posti puhul liiga tihti oma tööd testima, kuigi seda muus tarkvaraarenduses elementaarseks peetakse. Enne kui kasutajatele e-kiri laiali paisata, tasub alati teha test — näiteks tekitada endale kontod Hotmailis, Gmailis ja Yahoo! Mailis, Eestis miks mitte ka näiteks hot.ee-s ja muudes saitides, mis meiliteenust pakuvad. Ja siis saata endale kiri ja vaadata, kuidas see näeb välja erinevates meiliprogrammides (Thunderbird, Hotmail) ja veebimeiliteenustes. Esimene kord on tulemus üsna uskumatu, sest kuigi teoorias jälgivad kõik RFC-sid, on praktikas kõigil siiski oma kiiksud, millest lähtuvalt meili sisu eriti HTML-meili puhul üsna armutult “puhastatakse”, veebimeili puhul õigustatult näiteks turvalisuskaalutlustel. Meiliga on üsna võimalik hea kavatsus oskamatu teostuse tõttu kergelt tuksi keerata, seega tuleks alati testida ja alles siis “Send to All”-nuppu vajutada.

Teemad:

View blog reactions

Kommentaarid

tere, jaanus, ühes kohas oli meil jäänud üks rida õigesse kohta kirjutamata :-). aga teema on iseenesest huvitav. p.

Kirjutas: Priit | 24. mai 2006 11:40

Super! Täpselt selle subjekti täpitähtede jamaga just tegelesin ja piinasin rosinat... Tänud!

Kirjutas: Andrus Luht | 12. veebruar 2007 12:47

Kommenteeri

(Kui Sa pole siin varem kommenteerinud, siis võib-olla vaatab saidiomanik Su kommentaari enne avaldamist üle. Kannatust.)



Minu blogid

Otsi

My status

Mina

Kes, mis, miks
Kirjuta lühisõnum
Lisa kontaktidesse
Saada meil: jaanus ‘at’ jaanuskase.com

Teemad

Arhiiv

Meta

Creative Commons License
This weblog is licensed under a Creative Commons License.
Powered by
Movable Type 4.01
Kasutan DreamHosti veebimajutusteenust. On hea. Soovitan.
DreamHost
Content end