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.)
Ü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.
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:
Outlook 2003:
Veebipõhine meiliteenus (konkreetselt Squirrelmail):
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: e-post kiireee turundus veebitehnoloogiad
Minu blogid
Otsi
Mina
Teemad
Arhiiv
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
Meta




Kommentaarid
Kirjutas: Priit | 24. mai 2006 11:40
Kirjutas: Andrus Luht | 12. veebruar 2007 12:47
Kommenteeri