Protokół Multipurpose Internet Mail Extensions
Multipurpose Internet Mail Extensions (MIME) jest standardem internetowym, który rozszerza format e‑maili, aby obsługiwać:
- tekst w zestawach znaków innych niż US-ASCII;
- załączniki nienależące do tekstu;
- ciała wiadomości wieloczęściowych; oraz
- informacje nagłówka w zestawach znaków nie‑ASCII.
SMTP obsługuje tylko 7‑bitowe znaki ASCII, co w praktyce oznacza, że obsługuje jedynie niewielką liczbę języków. Języki oparte na alfabecie łacińskim działają w SMTP; inne języki nie są wyświetlane poprawnie po dostarczeniu wiadomości. MIME natomiast rozszerza obsługę znaków ASCII w SMTP, umożliwiając wysyłanie i wyświetlanie e‑maili z innymi zestawami znaków, obrazami i dźwiękami. Ogólnie wszystkie klienty poczty i serwery SMTP poprawnie mapują wiadomości w formacie MIME.
Zrozumienie nagłówków MIME
Nagłówki MIME zawierają informacje o protokole.
MIME-Version
Wskazuje, że wiadomość jest sformatowana jako MIME. Wygląda to tak:
MIME-Version: 1.0
Content-Type
Wskazuje typ treści wiadomości, podany jako para typ‑podtyp: np. text/plain, text/html. Typ multipart może zawierać tekst, HTML, załączniki, obrazy, dźwięk, wideo i tak dalej.
Content-Type: multipart
Content-Transfer-Encoding
Wskazuje, czy schemat kodowania binarny‑na‑tekst jest używany ponad kodowaniem określonym w content-type. Jeśli tak, określa który. Można tutaj podać typ kodowania 7-bit, 8-bit oraz binarny.
Encoded-Word
Nagłówki wiadomości SMTP zazwyczaj używają znaków ASCII. Znaki nie‑ASCII muszą używać składni zakodowanego słowa MIME zamiast dosłownego ciągu. Format jest następujący:
"=? charset ? encoding ? encoded text ?=".
Wiadomości multipart
Wiadomość MIME multipart zawiera granicę w nagłówku content-type. Granica, której nie może wystąpić w żadnej z części, jest umieszczana między częściami oraz na początku i końcu ciała wiadomości, jak poniżej:
MIME-version: 1.0
Content-type: multipart/mixed; boundary="frontier"
This is a multi-part message in MIME format.
--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żda część składa się z własnego nagłówka treści oraz ciała.
Podtypy multipart
Standard MIME definiuje różne podtypy wiadomości multipart. Podtyp jest określony w nagłówku „Content-Type” całej wiadomości.
Poniżej znajduje się lista najczęściej używanych podtypów.
- Mixed: multipart/mixed jest używany do wysyłania plików z różnymi nagłówkami „Content-Type” w treści. Przy wysyłaniu obrazków lub innych łatwo czytelnych plików, większość klientów poczty wyświetli je w treści.
- Message: część wiadomości zawiera e‑mail.
- Digest: digest to prosty sposób wysyłania wielu wiadomości tekstowych. Domyślny typ treści dla każdej części to "message/rfc822".
- Alternative: podtyp alternatywny wskazuje, że każda część jest „alternatywną” wersją tego samego (lub podobnego) treści, każda w innym formacie określonym w nagłówku „Content-Type”.
Najczęściej multipart/alternative jest używany w e‑mailach składających się z dwóch części: jednego tekstu zwykłego (text/plain) i jednego HTML (text/html). Część tekstowa zapewnia kompatybilność wsteczną, podczas gdy część HTML umożliwia użycie formatowania i hiperłączy. Większość klientów poczty oferuje użytkownikowi opcję preferowania tekstu zwykłego zamiast HTML; jest to przykład, jak lokalne czynniki mogą wpływać na to, którą „najlepszą” część wiadomości aplikacja wybierze do wyświetlenia.