MIME Parsing

Čo je to MIME

MIME (Multipurpose Internet Mail Extensions) je spôsob zakódovania viacerých dokumentov do jednej správy. Najčastejšie sa používa v e-mailoch a v HTTP komunikácii. V HTTP je to pri odosielaní určitého formátu formulárov, ktorý je (v súčasnosti) nutné použiť pri uploadovaní súborov. Pri odosielaní takéhoto formulára tvoria jednotlivé položky formulára (vrátane súborov) spomenuté dokumenty, ktoré sa pomocou MIME spoja do jedného, ktorý sa následne odošle.

Drvivú prevahu má však používanie MIME v e-mailovej komunikácii, kde sú ním kódované prakticky všetky nie-čisto-textové správy. Tieto obsahujú prílohy alebo alternatívne zobrazenia správy (text vs HTML). MIME zároveň poskytuje spôsob, akým sa môžu jednotlivé zakódované dokumenty na seba odvolávať.

Ako na MIME

V prvom rade musíte zistiť, či je spracúvaný dokument v MIME formáte. V HTTP aj mailovom protokole (konkrétne vo formáte e-mailových správ) sú použité headery +- rovnakého formátu, preto budem hovoriť o oboch naraz. Dokument by mal mať nastavený header Content-Type (pozor, názvy headerov sú case-insensitive) a ak je tento header nastavený na multipart/*, pracujete s MIME dokumentom. Potom v tomto headeri musíte nájsť aj hodnotu boundary, ktorá je vlastne oddeľovačom jednotlivých častí MIME dokumentu.

Pre boundary=”—-=_NextPart_000_0022_01C879B4.9B894D40″ potom dokument môže vyzerať nasledovne:

------=_NextPart_000_0022_01C879B4.9B894D40
Content-Type: image/jpeg;
	name="223-2-orig.jpg"
Content-Transfer-Encoding: base64
Content-ID: <002001c879ac$39c00340$9501a8c0@Pokojny>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGAAZADASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
...
Ppmtiy0mysEC28CKRzuxk/nW1PLJP4tBqg3uYvh7RJYZhfXYKSY2xRgn5VweP1rqKKO1exSpRpR5
YnRGKirI/9k=

------=_NextPart_000_0022_01C879B4.9B894D40
Content-Type: image/jpeg;
	name="Brooke_Haven_8222007120932PM721.jpg"
Content-Transfer-Encoding: base64
Content-ID: <002101c879ac$39c00340$9501a8c0@Pokojny>

/9j/4AAQSkZJRgABAgEBLAEsAAD/4RZ4RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA
AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodp
AAQAAAABAAAApAAAANAALcbAAAAnEAAtxsAAACcQQWRvYmUgUGhvdG9zaG9wIENTMiBXaW5kb3dz
...
SUKiq03TI6hqrNEs/r07TDFO0Fj9VZQVJ/VIhdjl1qy8yxfSJ0P0/pdJPPFOUlscsadWCR2BSpmp
fyjcztXHgf/Z

------=_NextPart_000_0022_01C879B4.9B894D40--

Boundary je uvedené na začiatku a konci správy, ako aj medzi každými dvoma časťami správy vo formáte CRLF–boundaryCRLF, s výnimkou výskytu na konci dokumentu, kde je vo formáte CRLF–boundary–CRLF. Každá časť správy má svoje vlastné headery, ktoré sú od zvyšku správy oddelené ako štandardné headery sekvenciou “CRLFCRLF”. Tieto zvyčajne obsahujú Content-Type jednotlivých častí správy, použitý transfer encoding (hlavne v e-mailoch, kde sa stále vo veľkom používa 7bitový prenos informácie) (z hlavných spomeniem Base64 a quoted-printable) a niekedy aj header Content-ID.

MIME umožňuje časti správy hierarchizovať do stromovej štruktúry, teda jedna časť MIME dokumentu môže byť ďalší MIME dokument (ten má samozrejme iné boundary). Túto vlastnosť používa napríklad e-mailový klient Outlook.

Odkazovanie častí MIME dokumentu na jeho iné časti

K tomuto sa využíva header Content-ID, ktorý môžete nájsť v častiach MIME dokumentu a ktorý slúži ako identifikátor danej časti. Ostatné (väčšinou ostatné, ale môže to byť aj rovnaká) časti dokumentu sa cezeň môžu odkazovať na časť dokumentu, ktorú označuje. Content-ID je v tvare <identifikátor>, jednotlivé dokumenty sa potom odkazujú pomocou identifikátor, v prípade HTML dokumentu v tvare cid:identifikátor, takže napríklad:

<img src="cid:identifikátor" alt="José v zálive" />

Leave a Comment