Multipurpose Internet Mail Extensions
MIME, plnÄËm nÄÄzvem Multipurpose Internet Mail Extensions (âÂÂvÄÂceÄĹĂÂelovÄÄ rozÄšÄÄÂÄšÂenÄ internetovÄĹ poÄšÄtyâÂÂ), je internetovÄË standard, kterÄË umoĚŞĚÂuje pÄšÂenÄÄÄšÄet texty v rĚŝznÄËch kÄĹdovÄÄnÄÂch, binÄÄrnÄ data a vÄÂcedÄÂlnÄĹ zprÄÄvy (napÄšÂ. opatÄšÂenÄĹ elektronickÄËm podpisem) kanÄÄly pĚŝvodnĂ navrĚŞenÄËmi pouze pro pÄšÂenos textovÄËch zprÄÄv v kÄĹdovÄÄnÄ ASCII. Standard vyvinutÄË pro elektronickou poÄšÄtu pouĚŞÄÂvajÄ i dalÄšÄÄ aplikaĂÂnÄ protokoly (napÄšÂ. HTTP). Standard MIME je definovÄÄn ÄšÄesti dokumenty: RFC 2045, RFC 2046, RFC 2047, RFC 4288, RFC 4289 a RFC 2049.
Charakteristika
PĚŝvodnÄ standard internetovÄĹ elektronickÄĹ poÄšÄty (RFC822 z roku 1982 a jeho pÄšÂedchĚŝdci ze 70. let 20. stoletÄÂ) dovoloval pouze pÄšÂenos textovÄËch zprÄÄv tvoÄšÂenÄËch relativnĂ krÄÄtkÄËmi ÄšÂÄÄdky v kÄĹdovÄÄnÄ ASCII. Proto nebylo dlouho moĚŞnÄĹ pouĚŞÄÂvat v elektronickÄĹ poÄšÄtĂ znaky s diakritikou ani posÄÂlat zprÄÄvy s pÄšÂÄÂlohami. ĂÂÄÄsteĂÂnÄËm ÄšÂeÄšÄenÄÂm bylo napÄšÂÄÂklad pouĚŞitÄ uuencodingu nebo jinÄËch metod, avÄšÄak citelnĂ schÄÄzela celosvĂÂtovÄÄ standardizace.
RozÄšÄÄÂÄšÂenÄ MIME pÄšÂedstavenÄÄ v roce 1992 rozÄšÄiÄšÂujÄ pouĚŞitÄ e-mailu o tyto moĚŞnosti:
- podpora jinÄËch kÄĹdovÄÄnÄ textu neĚŞ US-ASCII
- podpora pÄšÂenosu binÄÄrnÄÂch dat
- podpora pÄšÂÄÂloh (obrÄÄzky, zvuky, filmy, programy a podobnĂÂ) a vÄÂcedÄÂlnÄËch zprÄÄv
- informace v hlaviĂÂkÄÄch v jinÄËch kÄĹdovÄÄnÄÂch neĚŞ ASCII
FormÄÄt e-mailu s pouĚŞitÄÂm MIME je definovÄÄn v RFC 5322 (dÄšÂÄÂve RFC2822). Tento standard specifikuje formÄÄtovÄÄnÄ hlaviĂÂek, tĂÂla e-mailu a pravidla pro bĂÂĚŞnĂ pouĚŞÄÂvanÄĹ hlaviĂÂky jako To:
(Komu:
), Subject:
(PÄšÂedmĂÂt:
), From:
(Od:
) a Date:
(Datum:
).
MIME definuje sadu hlaviĂÂek pro specifikaci doplÄšÂkovÄËch atributĚŝ zprÄÄvy obsahujÄÂcÄ "content-type" a definuje sadu "transfer-encoding", kterÄÄ mĚŝĚŞe bÄËt pouĚŞita pro reprezentaci 8bitovÄËch binÄÄrnÄÂch dat pomocÄ textu v 7bitovÄĹ m kÄĹdovÄÄnÄ ASCII.
MIME hlaviĂÂka
MIME-Version
PÄšÂÄÂtomnost tÄĹ to hlaviĂÂky znaĂÂÄÂ, ĚŞe zprÄÄva je formÄÄtovÄÄna podle MIME, a udÄÄvÄÄ verzi MIME. JedinÄÄ dosud definovanÄÄ hodnota je âÂÂ1.0âÂÂ:
MIME-Version: 1.0
Content-Type
Tato hlaviĂÂka urĂÂuje typ internetovÄĹ ho mÄĹ dia (text, audio, video,âÂĹ) obsaĚŞenÄĹ ho v tĂÂle zprÄÄvy. SklÄÄdÄÄ se z typu a podtypu a popÄšÂÄÂpadĂ doplÄšÂkovÄĹ informace uvedenÄĹ za stÄšÂednÄÂkem (parametr). Informuje pÄšÂÄÂjemce o obsahu zprÄÄvy.
Typ - definuje o jakÄË typ souboru se jednÄÄ (text, obrÄÄzek, video, zvuk,âÂĹ)
Podtyp - definuje formÄÄt souboru
DoplÄšÂkovÄĹ informace - napÄšÂ. parametr udÄÄvajÄÂcÄ hodnotu
Content-Type: image/jpeg; parametr1=hodnota;
Content-Transfer-Encoding
UdÄÄvÄÄ, v jakÄĹ reprezentaci jsou pÄšÂenÄÄÄšÄena data v tĂÂle zprÄÄvy, aby vyhovovala moĚŞnostem pÄšÂenosovÄĹ ho kanÄÄlu:
- 7bit
- TextovÄĹ soubory obsahujÄÂcÄ pouze krÄÄtkÄĹ ÄšÂÄÄdky v kÄĹdovÄÄnÄ ASCII lze pÄšÂenÄÄÄšÄet i sedmibitovÄËmi kanÄÄly âÂÂtak jak jsouâ s uvedenÄÂm tohoto pÄšÂenosovÄĹ ho kÄĹdovÄÄnÄÂ.
- 8bit
- TextovÄĹ soubory s krÄÄtkÄËmi ÄšÂÄÄdky v jinÄĹ m kÄĹdovÄÄnÄ neĚŞ ASCII lze pÄšÂenÄÄÄšÄet osmibitovÄËmi kanÄÄly s uvedenÄÂm tohoto pÄšÂenosovÄĹ ho kÄĹdovÄÄnÄÂ.
- binary
- PÄšÂenosovÄĹ kÄĹdovÄÄnÄ pro pÄšÂenos libovolnÄËch dat (dlouhÄĹ ÄšÂÄÄdky, moĚŞnost ne-ASCII znakĚŝ) kanÄÄly, kterÄĹ to umoĚŞĚÂujÄÂ.
- quoted-printable
- UrĂÂenÄĹ pro pÄšÂenos textovÄËch souborĚŝ, kterÄĹ obsahujÄ i nevelkÄË podÄÂl ne-ASCII znakĚŝ a mohou obsahovat dlouhÄĹ ÄšÂÄÄdky, sedmibitovÄËmi kanÄÄly; nenÄ pÄšÂÄÂliÄšÄ efektivnÄ (kaĚŞdÄË ne-ASCII znak je zakÄĹdovÄÄn 3 znaky).
- base64
- UrĂÂenÄĹ pro pÄšÂenos libovolnÄËch dat sedmibitovÄËmi kanÄÄly; kÄĹduje libovolnÄÄ data pomocÄ ASCII textu; reprezentuje 3 oktety dat pomocÄ 4 ASCII znakĚŝ.
PÄšÂÄÂklad kombinace hlaviĂÂek pro pÄšÂenos ĂÂeskÄĹ ho textu v kÄĹdovÄÄnÄ ISO-8859-2 (mĂÂlo by se radĂÂji pouĚŞÄÂvat UTF-8) sedmibitovÄËm kanÄÄlem:
Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: quoted-printable
Content-ID
OznaĂÂuje identifikÄÄtor v hlaviĂÂce pro jednoznaĂÂnou identifikaci zprÄÄvy. SlouĚŞÄ k vytvoÄšÂenÄ odkazu z jednÄĹ zprÄÄvy na druhou.
message/external-body
Content-Description
Obsahuje popis informace o pÄšÂenÄÄÄšÄenÄĹ zprÄÄvĂÂ, napÄšÂ. nÄÄzev obrÄÄzku, kterÄË je ke zprÄÄvĂ pÄšÂiloĚŞen. Popisuje se v us-ASCII.
Content-Description: "popis obrazku"
Syntaxe Encoded-word
PoĂÂÄÂnaje RFC 2822 musÄ bÄËt jmÄĹ na hlaviĂÂek i jejich hodnoty zapsÄÄny pouze pomocÄ ASCII znakĚŝ. VybranÄÄ pole mohou obsahovat informace v jinÄĹ m kÄĹdovÄÄnÄÂ; tyto informace vÄšÄak musÄ bÄËt zakÄĹdovÄÄny pomocÄ "Encoded-word" syntaxe jako ASCII ÄšÂetĂÂzec tvaru
=?charset?encoding?encoded text?=
- charset udÄÄvÄÄ znakovÄĹ kÄĹdovÄÄnÄ pĚŝvodnÄÂho textu
- encoding mĚŝĚŞe bÄËt
Q
pro (mÄÂrnĂÂ upravenÄĹ ) kÄĹdovÄÄnÄÂ quoted-printable, neboB
pro kÄĹdovÄÄnÄ base64 - encoded text je pÄšÂenÄÄÄšÄenÄË text zakÄĹdovanÄË do podoby ASCII ÄšÂetĂÂzce neobsahujÄÂcÄÂho znaky otaznÄÂk ani mezery
NapÄšÂÄÂklad text PÄšÂihlÄÄÄšÄka do soutĂÂĚŞe
vyjÄÄdÄšÂenÄË v kÄĹdovÄÄnÄ UTF-8 mĚŝĚŞe bÄËt zakÄĹdovÄÄn jako =?UTF-8?Q?P=C5=99ihl=C3=A1=C5=A1ka_do_sout=C4=9B=C5=BEe?=
nebo =?UTF-8?B?UMWZaWhsw6HFoWthIGRvIHNvdXTEm8W+ZQ=?=
.
VÄÂcedÄÂlnÄĹ zprÄÄvy
VÄÂcedÄÂlnÄĹ zprÄÄvy (MIME multipart) v hlaviĂÂce Content-Type
definujÄ oddĂÂlovaĂ (boundary). OddĂÂlovaĂ je umÄÂstĂÂn mezi ĂÂÄÄstmi zprÄÄvy a na zaĂÂÄÄtku a konci tĂÂla zprÄÄvy, zde je pÄšÂÄÂklad:
MIME-version: 1.0 Content-type: multipart/mixed; boundary="frontier" --frontier Content-type: text/plain This is the body of the message. --frontier Content-type: application/octet-stream Content-transfer-encoding: base64 PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --frontier--
KaĚŞdÄÄ ĂÂÄÄst se sklÄÄdÄÄ ze svÄĹ vlastnÄ hlaviĂÂky a tĂÂla. Multipart bloky jako celek nemajÄ definovanÄĹ kÄĹdovÄÄnÄÂ, takĚŞe pokud nepracujeme s ASCII, je tÄšÂeba pouĚŞÄÂt syntaxi âÂÂencoded-wordâÂÂ; tĂÂla jednotlivÄËch ĂÂÄÄstÄ zprÄÄvy mohou pouĚŞÄÂt znakovou sadu nÄÄleĚŞÄÂcÄ do jejich "content-typu".
Podtypy vÄÂcedÄÂlnÄËch zprÄÄv
MIME standard definuje rĚŝznÄĹ podtypy vÄÂcedÄÂlnÄËch zprÄÄv (multipart), kterÄĹ specifikujÄ druh jednotlivÄËch ĂÂÄÄstÄ zprÄÄv. Podtyp je definovÄÄn v âÂÂcontent-typeâ hlaviĂÂce celÄĹ zprÄÄvy. NapÄšÂÄÂklad multipart zprÄÄva pouĚŞÄÂvajÄÂcÄ podtyp âÂÂdigestâ by byla v hlaviĂÂce zapsÄÄna jako âÂÂmultipart/digestâÂÂ.
StandardnĂ pouĚŞÄÂvanÄĹ jsou podtypy mixed a digest, ostatnÄ jsou volitelnÄĹ .
Seznam nejvÄÂce pouĚŞÄÂvanÄËch subtypĚŝ:
Mixed
âÂÂMultipart/mixedâ slouĚŞÄ pro pÄšÂenos ĂÂÄÄstÄÂ, kterÄĹ spolu nesouvisÄÂ. PouĚŞÄÂvÄÄ se pokud jsou jednotlivÄĹ ĂÂÄÄsti tĂÂla zprÄÄvy odliÄšÄnÄĹ a je tÄšÂeba je uspoÄšÂÄÄdat. Pokud se odesÄÂlajÄ napÄšÂ. obrÄÄzky, vĂÂtÄšÄina e-mailovÄËch klientĚŝ zobrazÄ tyto hlaviĂÂky jako vklÄÄdanÄĹ (inline).
Related
âÂÂMultipart/relatedâ slouĚŞÄ pro pÄšÂenos celku, kterÄË se sklÄÄdÄÄ z vÄÂce ĂÂÄÄstÄ â napÄšÂÄÂklad HTML strÄÄnka a vloĚŞenÄĹ obrÄÄzky.
Message
ĂÂÄÄst typu Message/rfc822 obsahuje kompletnÄÂ e-mail vĂÂetnĂÂ hlaviĂÂek.
Alternative
Podtyp âÂÂmultipart/alternativeâ znamenÄÄ, ĚŞe kaĚŞdÄÄ ĂÂÄÄst je alternativnÄ verze stejnÄĹ ho (nebo podobnÄĹ ho) obsahu, kaĚŞdÄÄ v jinÄĹ m formÄÄtu oznaĂÂenÄÄ svou hlaviĂÂkou. SystÄĹ m si mĚŝĚŞe ze vÄšÄech reprezentacÄ vybrat jednu, kterÄÄ je nejvhodnĂÂjÄšÄÄ pro zobrazenÄ zprÄÄvy. BĂÂĚŞnĂ je âÂÂmultipart/alternativeâ uĚŞÄÂvÄÄn pro e-mail sloĚŞenÄË ze dvou ĂÂÄÄstÄÂ, jedna je prostÄË text (text/plain) a druhÄÄ HTML (text/html). ĂÂÄÄst s prostÄËm textem dovoluje ĂÂtenÄ i v nejjednoduÄšÄÄšÄÄÂch klientskÄËch programech, zatÄÂmco HTML ĂÂÄÄst umoĚŞĚÂuje formÄÄtovÄÄnÄ a vytvoÄšÂenÄ odkazĚŝ. VĂÂtÄšÄina e-mailovÄËch klientĚŝ nabÄÂzÄ volbu, zda prostÄË text preferovat pÄšÂed HTML. Toto je pÄšÂÄÂklad toho, jak lokÄÄlnÄ faktory mohou ovlivnit âÂÂpoĂÂÄÂnÄÄnÄÂâ aplikace, kterÄÄ ĂÂÄÄst zprÄÄvy je âÂÂnejlepÄšÄÄÂâ pro zobrazenÄÂ. Zde je pro ilustraci pÄšÂÄÂklad:
From: Jan NovÄÄk <jan.novak@seznam.cz> To: Alois StarÄË <a.stary@ibm.com> Subject: Formatted text mail MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=boundary42 --boundary42 Content-Type: text/plain; charset=us-ascii --boundary42 Content-Type: text/x-whatever --boundary42 Content-Type: text/richtext --boundary42--
SystÄĹ m uĚŞivatele si v tomto pÄšÂÄÂkladu nejvÄÂce "rozumÄÂ" s formÄÄtem text/richtext, kterÄË je prvnÄ v poÄšÂadÄ relevantnosti (poslednÄ vypisovanÄË formÄÄt je nejlepÄšÄÄÂ) a proto jej vyuĚŞije, jinÄË systÄĹ m si vÄšÄak mĚŝĚŞe vybrat i z nabÄÂdky druhÄËch dvou formÄÄtĚŝ.
Signed
âÂÂmultipart/signedâ je vyuĚŞÄÂvÄÄn k pÄšÂiloĚŞenÄ digitÄÄlnÄÂho podpisu do zprÄÄvy. ZprÄÄva bude mÄÂt dvĂ ĂÂÄÄsti; v prvnÄ je text zprÄÄvy, ve druhÄĹ jeho digitÄÄlnÄ podpis.
Encrypted
âÂÂmultipart/encryptedâ slouĚŞÄ k ÄšÄifrovÄÄnÄ zprÄÄvy a mÄÄ dvĂ ĂÂÄÄsti. PrvnÄ obsahuje informace potÄšÂebnÄĹ k dekÄĹdovÄÄnÄÂ, druhÄÄ ĂÂÄÄst jsou vlastnÄ zakÄĹdovanÄĹ informace. NejbĂÂĚŞnĂÂjÄšÄÄÂmi typy jsou âÂÂapplication/pgp-encryptedâ a âÂÂapplication/pkcd7-mimeâÂÂ.
Odkazy
Reference
MIME RFC
- RFC 1426
- SMTP Service Extension for 8bit-MIMEtransport. J. Klensin, N. Freed, M. Rose, E. Stefferud, D. Crocker. ÄĹnor 1993.
- RFC 1847
- Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted
- RFC 3156
- MIME Security with OpenPGP
- RFC 2045
- MIME Part One: Format of Internet Message Bodies.
- RFC 2046
- MIME Part Two: Media Types. N. Freed, Nathaniel Borenstein. listopad 1996.
- RFC 2047
- MIME Part Three: Message Header Extensions for Non-ASCII Text. Keith Moore. listopad 1996.
- RFC 4288
- MIME Part Four: Media Type Specifications and Registration Procedures.
- RFC 4289
- MIME Part Four: Registration Procedures. N. Freed, J. Klensin. prosinec 2005.
- RFC 2049
- MIME Part Five: Conformance Criteria and Examples. N. Freed, N. Borenstein. listopad 1996.
- RFC 2183
- Communicating Presentation Information in Internet Messages: The Content-Disposition Header. Troost, R., Dorner, S. and K. Moore. srpen 1997.
- RFC 2231
- MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations. N. Freed, K. Moore. listopad 1997.
- RFC 2387
- The MIME Multipart/Related Content-type
- RFC 1521
- Mechanisms for Specifying and Describing the Format of Internet Message Bodies