23. december 2006 05.45 E-MAIL

Bezpečné vygenerovanie mailu s diakritikou v Perle

Začiatočníci v skriptovaní môžu mať v Perle menší problém ako "poskladať" e-mail s diakritikou. Všeobecne platí, že najbezpečnejším kódovaním diakritiky pre e-mail je ISO-8859-2, ktorému by mali rozumieť najčastejšie používané e-mailové klienty. Text, ktorý budeme odosielať musí teda byť v tomto kódovaní. Samostatnou kapitolou je kódovanie diakritiky v predmete správy (Subject), ktorý si zjednodušíme a v našom príklade si dáme pravidlo "predmet bude bez diakritiky". Toto pravidlo uplatníme aj na ďalšie kolónky hlavičky (príjemca a odosielateľ).

Najprv samotný kus kódu:

$from = 'sender@example.org';
$meno = 'meno odosielatela bez diakritiky';
$to = 'receipient@example.org';
$subject = 'predmet spravy bez diakritiky';

$mailprog = '/usr/lib/sendmail';
open (MAIL, "|$mailprog $to") || die "Can't run mail program!\n";
$mail = 'Content-Class: urn:content-classes:message'."\n";
$mail .= 'MIME-Version: 1.0'."\n";
$mail .= "Content-Type: text/plain;\n";
$mail .= ' charset="iso-8859-2"'."\n";
$mail .= 'Content-Transfer-Encoding: quoted-printable'."\n";
$mail .= "Subject: $subject\n";
$mail .= "From: $meno \<$from\>\n";
$mail .= "\n$messsage\n\n";
print MAIL $mail; close (MAIL);

Predpokladáme, že máme už naplnené premenné $from, $to, $meno, $subject a $message a ich význam pochopíme z ich pomenovania.

V premennej $message už máme pripravený text v kódovaní ISO-8859-2. V ňom nemožno používať na formátovanie žiadne HTML značky.

Základom riešenia v hlavičke e-mailu je určenie Content-type s parametrom text/plain a kódovaním iso-8859-2.

Pretože máme text v premennej $message v prirodzenom prekódovaní znakov mimo základnej ASCII tabuľky, tak ďalší povinný parameter je Content-Transfer-Encoding a toto prirodzené kódovanie znakov ASCII sa volá quoted-printable. Používajú sa ešte iné spôsoby zakódovania znakov mimo ASCII ale potom musí byť text špeciálne prekódovaný a prevodné tabuľky sú zložitejšie ako bežné prekódovacie funkcie medzi známymi kódovaniami diakritiky. Pozor rozlišujte kódovanie diakritiky a kódovanie znakov mimo ASCII tabuľku. Preto používame quoted-printable, pretože je naozaj najmenej náročné na ďalšie funkcie.

Obligátne určenie MIME verzie je už iba doplnením povinného obsadenia hlavičky e-mailu.

Pre pochopenie problematiky e-mailu je nutné vedieť, že mimo toho, čo vidíte v bežnom e-mailovom klientovi sa do e-mailu ukladajú dáta zásadne ako text. To znamená, že prípadné prílohy sa musia "prekódovať" do zmetku písmen a číslic a rôznymi technikami pridať do textového tela e-mailu. S diaktritikou v e-mailoch je podobný problém a v princípe je nutné chápať email bez diakritiky za niečo úplne iné ako email s diakritikou. Môj príklad sa najviac blíži spôsobu generovania jednoduchého emailu pretože nevyžaduje zakódovať text s diakritikou od emailu ako "prílohu".

Okrem toho každý e-mail chápte ako textový súbor, ktorý začína dohodnutým formátom hlavičky. Hlavička sa skladá z riadkov textu, ktoré začínajú dohodnutými slovami (From, To, Subject). Bežné poštové programy si tento súbor s mailom rozoberajú a snažia sa povyberať z hlavičky to, čomu rozumejú a podľa toho zobrazia e-mail. Niektoré časti hlavičky potom zobrazujú v poliach ako je Odosielateľ, Predmet, Komu, telo e-mailu či prílohy.

Potreba vniesť do pôvodne textoveho e-mailu diakritiku a prílohy (súbory) priniesla rôzne typy mechanizmov, ktoré včarujú do primitíva e-mailu všetky tieto vymoženosti. Daňou za to je možné vzájomné nepochopenie sa poštových systémov a pomerne komplikované rôzne spôsoby k dosiahnutiu toho istého výsledku (a tým pádom aj rôzny spôsob jeho interpretovania).

Mohol som Vám priniesť príklad ako skomplikovať takto jednoduchý príklad pomocou base64 prekódovania tela správy. Mohli sme vidieť ako sa musí prekódovať predmet správy pokiaľ obsahuje diakritiku. Ale zbavili sme sa toho predpokladom, že v predmete žiadna diakritika nesmie byť a telo správy bude "quoted-printable".

Technicky je možné v perle odoslať mail dvomi spôsobmi (aspoň mne sú známe):

  • knižnica Sendmail.pm - jej riziko je v menšej podpore (nenachádza sa v knižniciach perlu vždy,
  • priamym poslaním mailu do sendmailu ako vidno v príklade.

Ten druhý spôsob funguje pokiaľ máme sendmail umiestnený v /usr/lib a je administrátorom nakonfigurovaný. Sendmail je najbežnejší poštový systém na unixových systémoch a zvyčajne by mal fungovať pokiaľ sa administrátor nerozhodne inak.

Môj príklad nerieši problém keď je nutné mail "poslať" vzdialenému SMTP serveru!

Pokiaľ sa ti zdá, že tento článok by sa hodil do výberu zaujímavých stránok, tak ho sme.sk pošli do vybrali.sme.sk

Komentáre k obsahu príspevku:

Chcete napísať nesúhlasný komentár? Prosím, zvážte nasledovné: je šanca, aby niekto zmenil Váš názor alebo chcete iba trvať na svojom? V prvom prípade sú Vaše slová vítané.

Chcete urážať? Nepíšte sem urážky a invektívy. Každý, kto na týchto stránkach publikuje je automaticky (doplňte vhodný výraz). Takže už to všetci vopred vieme, čo si myslíte a preto sa neopakujte.

  1. [1] Kozo, 23. december 2006 12.30

    Osobne by som pre istotu v hlavickach doplnil, ze to posielam v 8-bit. Aj ked tam sice pises, ze to ide v QP, tak si si nevsimol, ze by si to do QP niekde kodoval. Mam chapat tak, ze $message uz je QP ? Potom byu bolo mozno zahodno doplnit, ako to bezny user do QP prekoduje.

  2. [2] rony, 23. december 2006 21.13

    aha dik za doplnenie

  3. [3] Ján Pavlík, 24. december 2006 08.09

    Funguje skript aj ked nemame sendmail, ale napr. postfix?

  4. [4] rony, 26. december 2006 01.22

    ak je ako exim kompatibilny so sendmailom tak preco to neodskusat?

  5. [5] 2ge, 4. január 2007 13.13

    ja som nuteny posielat maily v utf-8, myslim si ze zaoberat sa inym kodovanim patri do minulosti. Je pravda, ze mozno 1% mailovych programov moje maily neprecita (je to mime64 a vidia len zhluk znakov), ale...

  6. A tvoj názor?






Podmienky pre Váš komentár: Tlačidlo na odoslanie stlačte 1x, v texte nenadávajte, nevkladajte linky za účelom SEO, nepropagujte, Váš text musí mať zmysel, neporušujete vlastnícke práva majiteľa tejto stránky, ste pravidelný čitateľ tejto stránky, komentujete príspevok (nie erupcie Slnka) a nemýlite si komentáre s kvákacími fórami a chatom. Používajte formátovanie TEXTILE najmä na odkazy! Rozumiete tomuto poučeniu? áno, nie alebo Týmto sa pošle komentár?



funkcionalita - kto by bol spokojný s obyčajnou funkciou, ked môže mať rovno funkcionalitu? Je to dlhšie, znie to odbornejšie a dajú sa za to naúčtovať väčšie peniaze, keď posielame faktúru za nové webové stránky. Malý bullshitový slovník



Čítal som

Stručne komentované stránky, ktoré ma zaujali:

  • V Bombaji útočili teroristi. Rukojemníci sú v horiacom hoteli 07.59 Pri šiestich útokoch zomrelo najmenej 101 ľudí, z toho najmenej šesť cudzincov, zranených je 200-300 ľudí.
  • The Index.htm thread for Popcorn Hour 09.23 Velmi zaujimava rozsiahla tema diskusii okolo index.htm v PCH - spusta sa okamzite po nabootovani PCH ak je v roote.
  • Movable Type po rokoch | OttY@page 14.23 Z neistej príčiny som sa rozhodol, že si bližšie obzriem ako sa darí Movable Type („MT“), CMS napísanom v Perli, ktorý dnes nie je veľmi „IN“, aspoň v našich končinách (platí pre Perl aj pre Movable Type). Z dôvodu lepšieho ohmatania som si ho nainštaloval na hostingový server a trochu som sa pohral.
  • Dita Von Teese - Playboy, december 2008 12.58 Ditka v sete rozne ladenych fotografii.
  • 2.2 Firmware Now Available in iTunes 12.58 The newest version of firmware is now available in iTunes, version 2.2. We’re installing now on a test phone and will be providing screen shots and a direct link as soon as possible.
  • Kázeň musí být V. 12.58 Evžen vypadal zdrceně. Už zase v dobrém úmyslu, sám v roli poškozeného, porušil zákon. Protože věděl, že zákony se mají respektovat a navíc z toho neviděl cestu ven, zvláště poté, co se sám přiznal do protokolu, opět mužně přijal udělený trest. Je teď bez rádia, bez okénka, bez stěračů, bez poklic a bez antény, navíc ještě bez řidičáku a o pět tisíc lehčí.
  • Je čas na redefinici přístupnosti 11.15 Jestliže si nemohu jedním kliknutím přenést vlakový spoj z IDOSu do svého googlího kalendáře, není pro mne IDOS dostatečně přístupný.
  • Web - metody nahrazování standardních fontů - Chaos sanctuary 20.21 Standardní fonty se nahrazují především v hlavičkách a krátkých textech. Žádná z dále uvedených metod – sIFR, facelift (flir), typeface.js a font-face/CSS - není vhodná pro delší text. Všechny tyto metody jsou relativně nové a stále se vyvíjejí.
  • Nechte je padnout - Bloc 15.49 Ekonomická krize stejně jako každá správná choroba míří do další fáze. Zprávy z trhů už nejsou katastrofické, pouze špatné, pokles burz už není střemhlavý, ale pouze mírný a setrvalý, firmy nehlásí nečekané krachy ze dne na den (viz Lehman Brothers), pouze propouštějí po desetitisících a pouze hlásí snížení výroby či odbytu o pět, deset, dvacet procent.
  • Po ISS se prochází pavouk, dalšího zřejmě zmátl stav beztíže 14.39 Pavouka číslo dvě totiž natolik zmátl stav beztíže, že svou přepravku zaplnil sítěmi, aby přestal volně poletovat. V propletených síťových shlucích se nedá poznat, jestli je tam jeden nebo dva pavouci.
  • Got my girlfriend to model for my car (PICS) 09.39 Chlapik nafotil svoju priatelku pri svojom aute. Reakcii je tam na vyse 60 stran. Stravite na tejto stranke naozaj dlhy cas :-)
  • Tomanová má plán - eTREND 08.00 Ministerka Tomanová v relácii Slovenského rozhlasu "Sobotné dialógy" predstavila svoj plán zmien v systéme sociálneho poistenia a dôchodkového sporenia.


kde to ste?

príspevky

média


Čítaš Spravodaj? Klikni na Surf.sk!

WebHosting: WebServer.sk

Na také to domáce ukladanie veľkých súborov Kotuha.com

Dva šifrované gigabajty zadarmo pre vaše súkromné zálohy na mozy

Späť na obsah