Multipurpose Internet Mail Extensions (MIME) lubelektronicznej wielofunkcyjny Rozszerzenia Internettostandard internetowy, który rozszerzaformat danychze-mailido tekstu wsparcia w różnychkodowania znakówinnych niżASCII, treści nietekstowej, stwardnienie treści i informacji nagłówka w kodowaniu innym niżASCII. Ponieważ wiadomości e-mail są zwykle wysyłane przezSMTPw formacie MIME, są one często nazywane wiadomościamiSMTP / MIME.
Pierwotnie SMTP był zaprojektowany do przesyłania tylko plików tekstowych (zakodowanych w ASCII ). Wraz z pojawieniem się multimediów i coraz większym wykorzystaniem aplikacji biurowych pojawiła się potrzeba wymiany, oprócz plików tekstowych, plików binarnych (format aplikacji biurowych, obrazów, dźwięków, plików skompresowanych).
Typy treści zdefiniowane w standardzie MIME mogą być wykorzystywane do celów innych niż wysyłanie wiadomości e-mail, w protokołach komunikacyjnych, takich jak HTTP dla sieci WWW .
MIME jest początkowo określony w pięciu dokumentach RFC : RFC 2045, RFC 2046, RFC 2047, RFC 2048, RFC 2049. RFC 2045 jest uzupełniany przez RFC 2077. RFC 2048 , obecnie przestarzały, został zastąpiony przez RFC 6838 i RFC 4289.
Podstawowy protokół transmisji poczty e-mail, SMTP, obsługuje tylko znaki ASCII (o długości 7 bitów ). Ogranicza to e-maile do wiadomości zawierających tylko te znaki, czyli w kilku językach, takich jak angielski . Inne języki oparte na alfabecie łacińskim, w tym znaki diakrytyczne, nie są obsługiwane przez ASCII, więc te wiadomości nie mogą być poprawnie reprezentowane w podstawowych wiadomościach e-mail.
MIME definiuje mechanizmy wysyłania innych rodzajów informacji, takich jak tekst przy użyciu kodowania znaków innego niż ASCII (a więc prawdopodobnie w języku innym niż angielski) lub dane binarne (w tym pliki zawierające obrazy , dźwięki , filmy lub programy komputerowe ).
MIME jest również podstawowym składnikiem protokołów komunikacyjnych, takich jak HTTP , które wymagają wysyłania danych w tym samym kontekście, co wysyłanie wiadomości e-mail , Mimo że dane te nie są pocztą elektroniczną. Integracja lub wyodrębnianie danych w formacie MIME odbywa się zwykle automatycznie przez klienta poczty e-mail lub serwer poczty e-mail podczas wysyłania lub odbierania wiadomości e-mail.
Podstawowy format e-mail został zdefiniowany w dokumencie RFC 2822, która to zmiana z RFC 822. Normy te określają format nagłówków i treści wiadomości zawierających tekst, a także ogólnych nagłówków, takich jak „ To: ”, „ Subject: «» From: «lub» Date: ” . MIME definiuje zestaw dodatkowych nagłówków dla typu zawartości wiadomości („ Content‑Type: ”) i jej kodowania przesyłania („ Content-Transfer-Encoding: ”). Kodowanie transferu to sposób na przetłumaczenie treści wiadomości na ASCII. Dzięki takiemu tłumaczeniu początkowa treść może zawierać dowolne 8-bitowe dane (tekst w UTF-8 , plik binarny itp.). MIME definiuje również mechanizm używania tej funkcjonalności w nagłówkach wiadomości; pozwala to na przykład używać akcentów w temacie wiadomości e-mail lub w imieniu odbiorcy.
MIME jest rozszerzalny. Jego definicja obejmuje metodę rejestracji nowych typów treści lub innych wartości atrybutów.
Jednym z innych wyraźnych celów definicji MIME jest rezygnacja z konieczności zmiany istniejących serwerów pocztowych i umożliwienie podstawowej poczty e-mail prawidłowego funkcjonowania z istniejącymi klientami. Cel ten jest osiągany dzięki temu, że atrybuty wiadomości MIME są opcjonalne, a domyślnym zachowaniem jest tworzenie wiadomości tekstowej bez MIME, która może być poprawnie zinterpretowana przez klienta.
Obecność tego nagłówka wskazuje, że treść wiadomości jest sformatowana w MIME. Wartość to zazwyczaj „1,0”, więc nagłówek wygląda następująco:
MIME-Version: 1.0Ten nagłówek wskazuje rodzaj mediów internetowych treści wiadomości, składający się z typu i podtypu , na przykład:
Content-Type: text/plainMIME umożliwia wiadomościom zorganizowanie wielu części w strukturze drzewa , przy użyciu typu „ multipart ” dla węzłów wewnętrznych.
Mechanizm ten wspiera w szczególności:
Specyfikacja MIME ( RFC 2045 ) definiuje zestaw metod przesyłania lub kodowań (przywołanych na tej liście IANA ) w celu przedstawienia dowolnych danych jako tekstu ASCII. Nagłówek MIME „ Content-Transfer-Encoding ” wskazuje używaną metodę. Może mieć jedną z poniższych wartości (nie jest podatny na pękanie ):
Żadne kodowanie nie jest określone specjalnie do wysyłania dowolnych danych binarnych przez transport SMTP z rozszerzeniem 8BITMIME. Należy stosować metody Base64 lub Quoted-Printable (z ich odpowiednimi nieefektywnościami). Te ograniczenia nie mają zastosowania do innych zastosowań MIME, takich jak usługi internetowe z załącznikiem MIME lub MTOM .
Dane tekstowe (typ „ text ”) są zapisywane w określonym kodowaniu znaków , na przykład latin-9 lub UTF-8 . To kodowanie można określić za pomocą atrybutu charset= „ Content-Type: ” w nagłówku „ ”. Może to przyjąć dowolną wartość określoną przez IANA . Na przykład :
Content-Type: text/plain; charset=utf-8Tego kodowania nie należy mylić z kodowaniem przesyłania określonym w nagłówku „ Content-Transfer-Encoding: ”. W przypadku treści tekstowych oba kodowania są stosowane kolejno. Na przykład :
Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Ceci est un message encod=C3=A9 en UTF-8, puis transform=C3=A9 en ASCII par la m=C3=A9thode "Quoted-Printable".W tym przykładzie litera „é” jest kodowana w UTF-8 przez dwa bajty wartości szesnastkowych C3 i A9, które z kolei są kodowane w cudzysłowach do druku przez sekwencję „ =C3=A9 ”.
Począwszy od RFC 2822 , nazwy nagłówków wiadomości i ich wartości są zawsze w znakach ASCII. Wartości, które zawierają dane inne niż ASCII, muszą używać tak zwanej składni „ zakodowanego słowa ” MIME ( RFC 2047 ) zamiast standardowych wartości tekstowych. Ta składnia wykorzystuje ciągi znaków ASCII zarówno do określenia oryginalnego kodowania tekstu (odpowiednik atrybutu charset=nagłówka Content-Type:), jak i do kodowania przesyłania (odpowiednik nagłówka Content-Transfer-Encoding:).
Składnia jest następująca:
=?encodage?méthode?texte?=Kody ASCII dla znaku zapytania ( ?) i znaku równości ( =) nie powinny być przedstawiane bezpośrednio, ponieważ służą do oddzielania zakodowanych słów. Nie należy również używać kodu ASCII dla znaku spacji, ponieważ może to powodować błędy w starszych koderach, takie jak niechciana separacja słów. Aby kodowanie było jaśniejsze i łatwiejsze do odczytania, znak podkreślenia („ _ ”) jest używany do reprezentowania spacji. Dlatego znak podkreślenia nie może być już reprezentowany bezpośrednio. Użycie zakodowanych słów w niektórych częściach nagłówków nakłada ograniczenia na znaki, które mają być przedstawiane bezpośrednio.
Na przykład,
Subject: =?utf-8?Q?=C2=A1Hola,_se=C3=B1or!?=jest interpretowane jako:
Temat: ¡Hola, señor!Format zakodowanego słowa nie jest używany w nazwach nagłówków (na przykład „ Subject: ”). Te nazwy nagłówków w wiadomości są zawsze w języku angielskim. Gdy wiadomość jest wyświetlana w nieanglojęzycznym kliencie poczty e-mail, nazwy nagłówków mogą być przetłumaczone przez klienta.
Wieloczęściowy komunikat MIME określa linię separatora w nagłówku „ Content-type: ” za pośrednictwem atrybutu „ boundary= ”. To oddzielenie, które nie powinno pojawić się nigdzie indziej, jest umieszczane między częściami oraz na początku i na końcu treści wiadomości w następujący sposób:
Content-type: multipart/mixed; boundary="''frontière''" MIME-version: 1.0 This is a multi-part message in MIME format. --''frontière'' Content-type: text/plain This is the body of the message. --''frontière'' Content-type: application/octet-stream Content-transfer-encoding: base64 PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg== --''frontière''--Każda z tych części składa się z własnego nagłówka treści (zero, jedno lub więcej pól nagłówka Content-*:) i treści. Wiele części może być zawartych w innych częściach, z których każda ma własną granicę. Pole Content-Transfer-Encoding:typu wieloczęściowego powinno mieć wartość „ 7bit ”, „ 8bit ” lub „ binary ”, aby uniknąć problemów z dekodowaniem różnych warstw wieloczęściowych. Blok wieloczęściowy nie ma zestawu znaków, znaki inne niż ASCII w nagłówkach są przetwarzane przez system zakodowanych słów, a treści mogą mieć określony zestaw znaków odpowiedni do ich zawartości.
Uwagi:
Standard MIME definiuje kilka podtypów wiadomości wieloczęściowych w celu określenia charakteru różnych części wiadomości i ich relacji z innymi częściami. Podtyp jest określony przez nagłówek „ Content-type: ” załączającej wiadomości. Na przykład wieloczęściowa wiadomość MIME używająca podtypu „ digest ” powinna mieć swój nagłówek „ Content-Type: ” do „ multipart/digest ”. Dokument RFC początkowo zidentyfikował cztery podtypy: „ mixed ”, „ alternate ”, „ digest ” i „ parallel ”. Aplikacja musi obsługiwać co najmniej podtypy „ mixed ” i „ digest ”, pozostałe są opcjonalne. Dodatkowe podtypy, takie jak „ signed ” lub „ form-data ”, zostały zdefiniowane w innych dokumentach RFC .
Używane są głównie następujące podtypy:
mixedTyp " multipart/mixed " (zdefiniowany w RFC2046, Rozdział 5.1.3 ) jest używany do wysyłania plików z różnymi nagłówkami " Content-type: " (jako załączniki). Jeśli pliki są łatwe do odczytania lub są obrazami, większość klientów poczty e-mail wyświetla te pliki bezpośrednio w treści wiadomości (chyba że nagłówek „ Content-disposition: ” stanowi inaczej). W przeciwnym razie pliki są postrzegane jako załączniki. Domyślny typ zawartości dla tych części to „ text/plain ”.
Dokument RFC określa również, że wszystkie podtypy „ multipart ” nierozpoznane przez implementację powinny być traktowane tak samo jak „ multipart/mixed ”.
digestWpisz „ multipart/digest ” (zdefiniowany w RFC2046, sekcja 5.1.5 ) to prosty sposób na wysyłanie wielu wiadomości tekstowych. Domyślny typ zawartości to „ message/rfc822 ”.
alternativeTyp „ multipart/alternative ” (zdefiniowany w RFC2046, sekcja 5.1.4 ) wskazuje, że każda część jest alternatywną wersją tej samej treści w innym formacie. Formaty są uporządkowane rosnąco zgodnie z oryginalną zawartością. Odbiorca może więc wybrać najlepszą reprezentację, którą jest w stanie przetworzyć, na ogół ostatnią z listy.
Ponieważ klient na ogół nie chce wysyłać treści mniej znaczących niż zwykły tekst, jest on wysyłany jako pierwszy, co upraszcza przetwarzanie dla klientów, którzy nie rozumieją typu „ multipart ”, ponieważ jest to widoczna część tekstu. Pierwsza.
Głównym zastosowaniem typu „ multipart/alternative ” jest wysyłanie wiadomości e-mail w formacie HTML z jego odpowiednikiem w formacie tekstowym, aby zachować czytelność wiadomości dla klienta poczty e-mail, który nie może wyświetlać HTML (klient tekstowy).
Chociaż uważa się, że każda część posta przedstawia tę samą treść, nie ma gwarancji. Na przykład filtr antyspamowy może łatwiej przeskanować zwykłą tekstową część wiadomości niż część HTML; mając na uwadze, że edytor spamu zamiast tego utworzy wiadomość HTML z zawartością reklamową i zwykłą wiadomością tekstową, która jest nieszkodliwa lub niezwiązana z reklamą.
Typ „ multipart/related ” (zdefiniowany w RFC2387 ) służy do określenia, że różne części nie powinny być traktowane indywidualnie, ale jako całość. Wiadomość składa się z części głównej (domyślnie pierwszej), która odwołuje się do innych części, która może również odnosić się do innych części. Do części wiadomości często odwołuje się identyfikator treści (nagłówek „ Content-ID: ”). Składnia odniesień nie jest określona, pozostawia się to intencji używanego protokołu.
Jednym z typowych zastosowań tego podtypu jest wysyłanie strony internetowej z obrazami w jednej wiadomości. Część główna zawiera dokument HTML, a obrazy są przechowywane w kolejnych częściach.
reportTyp „ multipart/report ” (zdefiniowany w RFC3462 ) reprezentuje wiadomość zawierającą dane sformatowane do odczytu przez serwer poczty elektronicznej. Zawiera część typu „ text/plain ” (lub inną łatwą do odczytania treść) i inną część typu „ message/delivery-status ”, która zawiera dane sformatowane dla serwera poczty.
signedTyp „ multipart/signed ” (zdefiniowany w RFC1847, sekcja 2.1 ) służy do dołączania podpisu cyfrowego do wiadomości. Składa się z dwóch części: treści wiadomości i podpisu. Cała część treści wiadomości, w tym nagłówki MIME, jest używana do generowania podpisu. Możliwe są różne typy podpisów, takie jak „ application/pgp-signature ” lub „ application/x-pkcs7-signature ”.
encryptedTyp „ multipart/encrypted ” (zdefiniowany w RFC1847, sekcja 2.2 ) jest używany do wysyłania zaszyfrowanych treści . Pierwsza część zawiera informacje niezbędne do odszyfrowania drugiej części (typu „ application/octet-stream ”).
form-dataTyp „ multipart/form-data ” (zdefiniowany w RFC2388 ) służy do wysyłania danych z formularza. Pierwotnie zdefiniowany jako część HTML 4.0 , jest częściej używany do wysyłania plików przez HTTP .