MIME Multipurpose Internet Mail Extensions RFC 1521 Michał Rajkowski Jan Dudziec
Plan prezentacji Definicja MIME MIME, a inne RFC Format wiadomości Pola nagłówka Typy zawartości Podsumowanie RFC 1521 - MIME
Definicja MIME MIME - Multipurpose Internet Mail Extensions - Standard poczty elektronicznej - Mechanizmy specyfikacji i opisu formatu zawartości wiadomości internetowych RFC 1521 Uzupełnia wcześniejsze publikacje i rozszerza standardy o mechanizmy pozwalające na przesyłanie różnych typów zawartości RFC 1521 - MIME
Wcześniejsze publikacje (1) RFC 822 – Standard opisujący format wiadomości internetowych (1982r.) Treść: - Protokół reprezentacji wiadomości - Specyfikacja nagłówka - Format i zawartość wiadomości – 7 bitowy kod ASCII Wady: - wiadomości tekstowe – brak formatowania (czcionek itp) - wiadomości nie tekstowe – odrzucane lub konwertowane na ASCII -> utrata informacji RFC 1521 - MIME
Wcześniejsze publikacje (2) RFC 1341 i RFC 1342 – pierwsze publikacje i definicje MIME RFC 1341 - MIME (Multipurpose Internet Mail Extensions): Mechanisms for Specifying and Describing the Format of Internet Message Bodies RFC 1342 - Representation of Non-ASCII Text in Internet Message Headers RFC 1521 zostało wprowadzone, aby zastąpić RFC 1341, RFC 1342. RFC 1521 - MIME
RFC 1521 RFC 1521 - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies Zmiana formatu wiadomości Opis mechanizmów pozwalających na przesyłanie obiektów różnego typu bez straty informacji Zawartość specyfikacji: Version Header Field Content-Type Header Field Content-Transfer-Encoding Header Field Additional Content-Header Fields Content-ID Header Field Content-Description Header Field RFC 1521 - MIME
Format wiadomości HEADER { BODYPART Bodypart header { MIME-version: 1.0 Content-type: multipart/mixed; boundary="frontier" This is a multi-part message in MIME format. --frontier Content-type: text/plain Content-type: application/octet-stream Content-transfer-encoding: base64 Pgh0bWw+CiAgPGhlYWQ+CiAgPC9oZWF kPgogIDxib2R5PgogICAgPHA+VGhpcyBpc yB0aGugYm9keSBvZiB0aGUgbWVzc2FnZ S48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg= --frontier-- BODYPART Bodypart header { Bodypart header { Body { RFC 1521 - MIME
MIME-Version Header Field Nowe pole nagłówka Określa numer wersji formatu zawartości wiadomości Wartość dla standardu zgodnego z RFC1521: Ogólna postać: MIME-Version: 1.0 version := "MIME-Version" ":" 1*DIGIT "." 1*DIGIT RFC 1521 - MIME
Content-Type Header Field content := "Content-Type" ":" type "/" subtype *(";" parameter) type := "application" / "audio" / "image" / "message"/ "multipart" / "text" / "video" / extension-token extension-token := x-token / iana-token iana-token := <publiczny i zarejestrowany w IANA> x-token := < "X" -token or "x" -token> subtype := token parameter := attribute "=" value attribute := token value := token token := 1*<any (ASCII) CHAR except SPACE, CTLs, or tspecials> tspecials := "(" / ")" / "<" / ">" / "@" "," / ";" / ":" / "\" “<">"/" / "[" / "]" / "?" / "=" Pole zdefiniowane po raz pierwszy w RFC 1049 Określa typ danych zawartych w ciele wiadomości Jest zbiorem parametrów Parametry obowiązkowe: TYP i PODTYP Typ- rodzaj zawartości: text,multipart,application, message, audio,video, image, experimental Podtyp- np. format Przykład: “ image/jpg” RFC 1521 - MIME
Content-Transfer-Encoding Header Field encoding := "Content-Transfer-Encoding" ":"mechanism Nowo zdefiniowane pole Wskazuje typ transformacji ciała wiadomości użyty na potrzeby transportu wiadomości Domyślna wartość - “7bit” Część nagłówka wiadomości i nagłówka ciała wiadomości mechanism := "7bit" "quoted-printable" "base64" "8bit" "binary" x-token Przykład: Content-Type: text/plain; charset=ISO-8859-1 Content-transfer-encoding: base64 RFC 1521 - MIME
Content-Transfer-Encoding Header Field “7bit”,”8bit”,”binary” => brak kodowania Quoted-printable Standardowo do przesyłania tekstu Drukowalne znaki ASCII Znaki o kodach >127 -> 3 znaki Przykład: Ó - 243 (ISO-8859-2) => “=F3” Base64 stosowany głownie do plików binarnych (grafika, dźwięk) możliwy do zastosowania także dla zwykłego tekstu RFC 1521 - MIME
Content-Transfer-Encoding Header Field The Base64 Alphabet RFC 1521 - MIME
Additonal Content-Header Fields Optional Content-ID Header Field Etykieta zawartości Analogiczne wykorzystanie jak “Message-ID” Obowiązkowy dla typu “message/external-body” Optional Content-Description Header Field Opisowe informacje Standardowo w postaci US-ASCII, RFC-1522 posiada mechanizm pozwalający na korzystanie z innego kodowania niż US-ASCII Przykład: Description := “Content-Description “:” *text RFC 1521 - MIME
Typy zawartosći Text Multipart Message Application Image Audio Video Experimental RFC 1521 - MIME
TEXT Zasadniczo do przesyłania zawartości tekstowej CHARSET - krytyczny parametr używany do zdefiniowania podtypów Domyślnie - “text/plain;charset=us-ascii” Zdefiniowane wartości charset: US-ASCII, ISO-8859-X Przykład: text-type := "text" "/" text-subtype [";" "charset" "=" charset] text-subtype := "plain" charset := "us-ascii"/ "iso-8859-1"/ "iso-8859-2"/ "iso-8859-3" / "iso-8859-4"/ "iso-8859-5"/ "iso-8859-6"/ "iso-8859-7" / "iso-8859-8" / "iso-8859-9" RFC 1521 - MIME
MULTIPART Umożliwia przesyłanie kilku różnych typów danych w 1 wiadomości Każda część to osobne “bodypart” z osobnym nagłówkiem Enkapsulacja- każda część oddzielona granicami boundary := 0*69<bchars> bcharsnospace W przypadku wystapienia średnika „:” - Dozwolone kodowania- “7bit”, “8bit”, “binary” Podtyp: “mixed” (podstawowy),“alternative”, “digest”, ”parallel” Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p RFC 1521 - MIME
MULTIPART-przykład From: Nathaniel Borenstein <nsb@bellcore.com> To: Ned Freed <ned@innosoft.com> Subject: Formatted text mail MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=boundary42 --boundary42 Content-Type: text/plain; charset=us-ascii ---TEKST niesformatowany---- Content-Type: text/richtext ---TEKST w fromacie richtext--- Content-Type: text/x-whatever --Oryginalna postać tekstu---- --boundary42-- RFC 1521 - MIME
MESSAGE Dołączenie innej wiadomości Możliwe podtypy: “rfc822”, “partial” , “external- body” Wymaga kodowania “7bit”, “8bit”,”binary” Message header: us-ascii (zawsze) Partial – umożwilia przesyłanie duży obiektów podzielonych na części (łączenie po “content-id”) External-body-obowiązkowy parametr “acces-type” Parametry opcjonalne: “expiration”, “size”,”permission”, “name”,”site”, “directory”,”mode”, “server”,”subject” RFC 1521 - MIME
MESSGE-przykład 1 X-Weird-Header-1: Foo From: Bill@host.com To: joe@otherhost.com Subject: Audio mail Message-ID: <id1@host.com> MIME-Version: 1.0 Content-type: message/partial; id="ABC@host.com"; number=1; total=2 X-Weird-Header-1: Bar X-Weird-Header-2: Hello Message-ID: <anotherid@foo.com> Content-type: audio/basic Content-transfer-encoding: base64 Message-ID: <id2@host.com> id="ABC@host.com"; number=2; total=2 RFC 1521 - MIME
Message-przykład 2 From: Whomever To: Someone Subject: whatever MIME-Version: 1.0 Message-ID: <id1@host.com> Content-Type: multipart/alternative; boundary=42 Content-ID: <id001@guppylake.bellcore.com> --42 Content-Type: message/external-body; name="BodyFormats.ps"; site="thumper.bellcore.com"; access-type=ANON-FTP; directory="pub"; mode="image"; expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript Content-ID: <id42@guppylake.bellcore.com> access-type=mail-server server="listserv@bogus.bitnet"; get RFC-MIME.DOC --42-- RFC 1521 - MIME
APPLICATION Przesyłanie danych nie zakwalifikowanych do pozostałych kategorii Przetwarzanie zawartosci przed pokazaniem jej uzytkownikowi Podtypy: “octet-stream”(dane binarne), “Postscript”(program napisany w jezyku Postscript/Postscript2 – Adobe Systems Inc.) “octet-stream” - parametry: “type”, “padding” Kolejne typy mają być zdefiniowane w przyszłości RFC 1521 - MIME
IMAGE, AUDIO, VIDEO IMAGE Do przesyłania obrazów Podtyp- format obrazu: “jpeg”, “gif” itp. AUDIO Podstawowy podtyp “basic”- kodowanie 8 bitowe [PCM] VIDEO Do przesyłania plików video (dopuszczalnie z dźwiękiem) Podtyp- format video: “mpeg” RFC 1521 - MIME
EXPERIMENTAL Eksperymentalne podtypy Zaczynają się na “X-” Formaty bez jednoznacznej i publicznej definicji Prywatne wartości Odradza się tworzenie nowych typów – powinno się stosować rozszerzanie już istniejących RFC 1521 - MIME
Zasady korzystania z MIME Agent pocztowy używający MIME musi: Zawsze tworzyć pole “"MIME-Version: 1.0"” Rozpoznawać “Content-Transfer-Encoding” i przeprowadzić odpowiednie dekodowanie Rozpoznawać i odpowiednio prezentować dane inne niż “text” “Text”- wyświetlać za pomocą US-ASCII, jak nie zna podtypu to prezentować nieprzetworzone dane, rozpoznawać “charset”, rozpoznawać “ISO-8859-X” “Message”- rozpoznawać podtyp “822” “Multipart”- rozpoznawać podtyp “mixed” i “alternative” “Application”- rozpoznawać podtyp i umieszczać zawartość w pliku RFC 1521 - MIME
Podsumanie MIME jest powszechnie stosowanym standardem do przesyłania i przetwarzania wiadomości RFC 1521 jest pierwszym i podstawowym dokumentem opisującym przesyłanie różnych typów wiadomości Dalsze wersje: RFC 2045- Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies RFC 2046-Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types RFC 2047- MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text RFC 2048-Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures RFC 2049-Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples RFC 1521 - MIME
Pytania na kolokwium W przypadku stosowania Quoted-printable, co się dzieje gdy mamy znak o wartości większej od 127 Nie jest on przesyłany Jest kodowany za pomocą 3 znaków Ani a), ani b) Co jest typem podstawowym dla Multipart? Parallel Mixed Digest Czy możemy ustawić (dla typu zawartości Message) message header inny niż us-ascii? Tak, jeżeli użyjemy kodowania 7 bit Tak, jeżeli użyjemy kodowania 8bit lub binary RFC 1521 - MIME
Dziękujemy za uwagę. RFC 1521 - MIME