MIME jest protokołem wielozadaniowego rozszerzenia poczty internetowej, której zasady zostały sprecyzowane w 1988 r. pod nazwą „STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES” – RFC 822 z 1988 r.
Oficjalnie nazwa MIME pojawia się najpierw w RFC 1341. Wcześniej dwie ważne zmiany były opublikowane w RFC 934 i 1049. Pierwsza dotyczyła kapsułkowania wiadomości, a druga wprowadzenia pola nagłówka – Content-Type. MIME z RFC opiera się zarówno na RFC 822, jak i 934 oraz 1049. Następnie protokoły MIME z RFC 1521 i 1522 zastąpiły dotychczasowe, a później i one zostały zastąpione przez RFC 2045/6/7/8/9 i kilka innych. Zbiór protokołów MIME uważa się powszechnie za jeden protokół wersji 1.0.
MIME, zgodnie z nazwą, rozszerza SMTP i znosi wszystkie ograniczenia tego protokołu. Umożliwia wstawianie do wiadomości poczty elektronicznej różnych plików nietekstowych, nazywanych tu załącznikami. W ten sposób można pocztą przesyłać obrazy, dźwięk, programy, muzykę, teksty w pełni sformatowane lub zwykłe.
Przesyłka może zawierać wiele różnych obiektów. Protokół nie ogranicza jej długości i długości linii. Można stosować różne kroje pisma, tabele, zestawy znaków alfabetu narodowego itp. MIME przed wysłaniem wiadomości transponuje wszystkie załączone pliki na postać tekstową i uzupełnia każdy informacjami o rodzaju danych. W komputerze odbiorcy, obsługującym ten protokół, następuje konwersja odwrotna. Wszystkie te procedury są ukryte przed użytkownikami.
Każda wiadomość SMTP składa się z dwu części:
Rozdziela te części jedna pusta linia. Nagłówek zawiera różne słowa kluczowe (To, From, Subject, Cc...) i przyporządkowane im wartości (adresy, nazwy...). Są to informacje sterujące. Jeśli pierwsze wiadomości tekstowe miały nagłówek w postaci:
From: ajwar@pc.com
To: ejwro@absd.com
Subject: Zaproszenie
[... tekst wiadomości...],to MIME definiuje 5 dodatkowych pól, które mogą być dodane do nagłówka pocztowego. Na przykład wiadomość zawierająca ilustrację w formacie JPEG może mieć następujący nagłówek:
From networld@idg.com.pl
To: „aj”nwwroc@mtl.pl
Subject: Rysunek do AJ1344
MIME-Version: 1.0
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
[... dane JPEG...]
Tu nagłówek wiadomości zawiera już pole wersji MIME (MIME-Version). Content-Type określa typ przesyłanej wiadomości, w tym przypadku rysunek w formacie JPEG. Z kolei pole Content-Transfer-Encoding wyszczególnia metodę konwersji bitów i bajtów JPEG na tekst ASCIII. Kodowanie base64 oznacza, że dane były grupowane po 3 bajty i że taka grupa 24-bitowa został podzielone na 4 liczby 6-bitowe, zastąpione następnie znakami drukowalnymi: literami A–Z oraz a–z, cyframi 0–9 i znakami + oraz /.
Przykłady: 000000 (0) – A, 011001 (25) – Z,..., 011010 (26) – a, 110011 (51) – z, 110100 (52) – 0,..., 111101 (61) – 9, 111110 (62) – +, 111111 (63) – /. Ten sposób kodowania nadaje się nie tylko do plików graficznych JPEG, ale i wszystkich innych. Powoduje jednak wzrost objętości danych o 30 proc.
Dwa inne pola MIME opisywanej wiadomości, które z uwagi na ich popularność zostały pominięte, to Content-ID i Content-Description. Pierwszy jest unikatowym identyfikatorem wiadomości równoważnym Message-ID w SMTP, a drugi daje możliwość dołączenia dodatkowej wiadomości tekstowej, tu na przykład „Proponowany rysunek pakietu LPC”.
Pole Content-Transfer-Encoding wskazywało na kodowanie base64. Nie jest to jedyna metoda, jakkolwiek uniwersalna. Quoed-printable w nagłówku Content-Transfer-Encoding określa metodę kodowania danych zawierających pewną liczbę znaków spoza standardowego ASCII, a więc litery polskie, słowackie czy węgierskie. Kodowanie tych specyficznych znaków polega na zastąpieniu każdego aż trzema znakami: znakiem równości (=) i numerem znaku (zgodnym z Polską Normą PN-93 T-42118) zapisanym szesnastkowo.
Przykład: kodem litery ą jest 177, a 177 w zapisie szesnastkowym (zobacz IPv6) ma wartość B1, wobec czego litera ą zostanie przesłana jako ciąg =B1. Znak równości, jeśli występuje w jakiejś relacji, będzie zastąpiony ciągiem =3D. Kiedy natomiast w nagłówku Content-Transfer-Encoding znajdzie się nazwa 8bit, dane będą przesyłane w postaci 8-bitowej, która nie wymaga konwersji. Inne mechanizmy Content-Transfer-Encoding to: 7bit, binary, x-token i ietf-token.
Nagłówek Content-Type zawierał w przykładzie typ zawartości przesyłki o nazwie Image (format graficzny).
W polu tego nagłówka mogą się znaleźć jeszcze inne typy zawartości:
Niektóre typy zawartości dzielą się na podtypy. Application dzieli się na podtypy Octet-stream (dane binarne dowolnego typu) i Postscript (PostScript), Image na gif (grafika GIF) i jpeg (grafika JPEG) itd. Można również zdefiniowań nowy typ lub podtyp nadając im unikatowe nazwy lub poprzedzić istniejące przedrostkiem „x-”.
MIME daje także możliwość umieszczania specyficznych znaków w samych nagłówkach, na przykład po słowach kluczowych From, To, Subject czy Cc. Służy do tego sekwencja drukowalnych znaków ASCII – encoded-word=.
Jej składnia jest następująca: encoded-word = „=?” charset „?” encoding „?” encoded-text „?=” Cała sekwencja musi się rozpoczynać i kończyć znakami „?=” (bez cudzysłowu) i ponadto muszą się w niej znaleźć 2 znaki „?”. Całkowita długość sekwencji nie może przekraczać 75 znaków, wliczając w to całą treść, separatory, symbol kodu itp. Charset jest zastosowanym, znormalizowanym zestawem znaków, a encoding umowną nazwą użytego kodowania: Q (lub q) oznacza Quoted-Printable (zamiast spacji stosuje się tu _), B (b) – BASE64 (base64). Zakodowany według tych reguł tekst to encoded-text.
Oto przykład:From:=?I8859-2?q?Andrzej_Pr=B1dzy=F1ski?=<apr@pas.com.pl>
Przy dobrze zaimplementowanym MIME będzie to przesyłka od Andrzeja Prądzyńskiego. ISO-8859-2 zawiera polskie znaki. Z tą normą międzynarodową jest w pełni zgodna nasza norma PN-93 T-42118.
Zakres zastosowań MIME rozciąga się też na sieć WWW. Dostosowanie stron WWW do formatu MIME nie jest trudne, zwykle wystarcza dopisanie do dokumentu paru podpowiadanych linijek. Przeglądarki internetowe mogą dzięki MIME rozpoznawać wiele innych formatów niż HTTP. Najpierw jednak informacje o typie plików w formacie MIME muszą się znaleźć w nagłówkach pakietów HTTP. Jest to misja serwerów.