Tutorial MIME/ESMTP

1. Messagerie Internet

1.1. Généralités

1.1.1. Le concept de messagerie

Tranfert non sollicité de fichier

Communication asynchrone

1.1.2. Le modèle MTA/UA/MS

1.1.3. Les protocoles

Messagerie Internet

Couche application / TCP / IP

Protocole SMTP

RFCs: 821, 822, 1123

Révision en cours à l'IETF (working group drums)

1.1.4. Déploiement dans l'Internet

Utilisation du DNS: champs MX

1.2. Le protocole SMTP (RFC821)

1.2.1. caractéristiques

Protocole texte

7 bits

NVT-ASCII

Ligne à ligne (CR/LF)

1.2.2. Exemple de dialogue SMTP

220-mailhost.mondomaine.fr Sendmail 8.6.12/8.6.12 ready at Mon,

30 Oct 1995 15:38:46 +0100

220 ESMTP spoken here

HELO client.autredomaine.fr

250-mailhost.mondomaine.fr Hello client.autredomaine.fr

[193.55.0.1], pleased to meet you

VRFY <postmaster>

250 <postmaster@mailhost.mondomaine.fr>

EXPN <postmaster>

250-<user1@mailhost.mondomaine.fr>

250-<user2@mailhost.mondomaine.fr>

MAIL FROM: <alain.durand@autredomaine.fr>

250 alain.durand@autredomaine.fr... Sender ok

RCPT TO: <jean.dupont@mondomaine.fr>

250 jean.dupont@mondomaineinria.fr... Recipient ok

DATA

354 Enter mail, end with "." on a line by itself

from: <alain.durand@autredomaine.fr>

to: <jean.dupont@mondomaine.fr>

subject: test

sdfsdfs

blah blah

...

.

250 PAA02281 Message accepted for delivery

QUIT

221 mailhost.mondomaine.fr closing connection

1.3. Le message (RFC822)

1.3.1. Structure

En-tête

Ligne blanche

Corps du message

1.3.2. En-têtes

FROM:

TO:

CC:

REPLY-TO:

ERROR-TO:

DATE:

RECEIVED

MESSAGE-ID

1.3.3. Corps

Suite de lignes terminées par RC/LF

Pas de structure propre

1.4. Bilan

1.4.1. Très large utilisation
1.4.2. Limitations

7 bits

Texte ascii non structuré

1.4.3. Pour aller au delà

Encodage de corps 8 bits vers 7 bits

Envoie d'un "mode d'emploi" séparé.

1.4.4. Evolution non standardisées

uuencode

binhex

sun-attachements

1.4.5. Evolution standardisée

MIME (Multipurpose Internet Mail Extension, RFC1521)

2. MIME (RFC 1521)

2.1. Buts

Standardiser les méthodes de transfer de données 8 bits

Structurer le corps des messages en contenus (body-parts)

Standardiser les différents contenus possibles

2.2. En-tête Mime

Un en-tête est rajouté à ceux définis dans le RFC 822 pour préciser que ce qui suit est un message au format MIME:

Mime-version: 1.0

Seule la version 1.0 est définie à ce jour.

2.3. Transfer de données 8 bits

Définition de 5 formes de transfers

2.3.1. Texte 7 bits, US-ASCII

standard SMTP

2.3.2. Quoted-Printable

Remplacer tout ce qui n'est pas US-ASCII par une séquence d'échapement =XY où XY est le code ASCII hexadécimmal du caractère

Perte: environ 20 %, selon la nature des données.

NB: Il faut préciser l'alphabet utilisé.

Un codage spécial est prévu pour encoder les fins de lignes.

2.3.3. Base 64

Restrient le jeu de caractère à un alphabet 6 bits

24 bits explosés en 4 caractères US-ASCII

perte: 30% (fixe)

Avantages sur uuencode:

N'utilise pas hyphen ("-")

Pas d'interférence connue à ce jour avec un MTA

Pas de conflits avec EBCDIC.

2.3.4. 8Bits

Le message reste constitué de lignes terminées par CR/LF

Les lignes sont composées de caractères 8 bits

NB: Il faut préciser l'alphabet utilisé.

2.3.5. Binary

Le message est du binaire pur, il n'y a plus de notion de lignes

Problème: comment reconnaitre la fin du message?

2.4. Content-types

La structuration des messages se fait avec des en-têtes supplémentaires décrivant le contenu du message.

Ces contenus sont standardisés en 7 types

Chaque type de contenus est qualifié par un sous-type. Des paramètres peuvent être présent.

2.4.1. Multipart

Permet d'inclure plusieurs parties dans un message

2.4.1.1. Multipart/mixed
2.4.1.2. Multipart/parallel
2.4.1.3. Multipart/digest
2.4.1.4. Multipart/alternative

2.4.2. Message

Le contenu est lui même un message

2.4.2.1. Message/rfc822
2.4.2.2. Message/partial
2.4.2.3. Message/external-body

2.4.3. Text

2.4.3.1. Text/plain
2.4.3.2. Text/richtext

2.4.4. Image

2.4.4.1. Image/gif
2.4.4.2. Image/jpeg

2.4.5. Audio

2.4.5.1. Audio/basic

2.4.6. Video

2.4.6.1. Video/mpeg

2.4.7. Application

2.4.7.1. Application/octet-stream
2.4.7.2. Application/postscript

2.5. Exemple de message

MIME-Version: 1.0

From: Nathaniel Borenstein <nsb@bellcore.com>

To: Ned Freed <ned@innosoft.com>

Subject: A multipart example

Content-Type: multipart/mixed;

boundary=unique-boundary-1

This is the preamble area of a multipart message.

Mail readers that understand multipart format

should ignore this preamble.

If you are reading this text, you might want to

consider changing to a mail reader that understands

how to properly display multipart messages.

--unique-boundary-1

...Some text appears here...

[Note that the preceding blank line means

no header fields were given and this is text,

with charset US ASCII. It could have been

done with explicit typing as in the next part.]

--unique-boundary-1

Content-type: text/plain; charset=US-ASCII

This could have been part of the previous part,

but illustrates explicit versus implicit

typing of body parts.

--unique-boundary-1

Content-Type: multipart/parallel;

boundary=unique-boundary-2

--unique-boundary-2

Content-Type: audio/basic

Content-Transfer-Encoding: base64

... base64-encoded 8000 Hz single-channel

mu-law-format audio data goes here....

--unique-boundary-2

Content-Type: image/gif

Content-Transfer-Encoding: base64

... base64-encoded image data goes here....

--unique-boundary-2--

--unique-boundary-1

Content-type: text/richtext

This is <bold><italic>richtext.</italic></bold>

<smaller>as defined in RFC 1341</smaller>

<nl><nl>Isn't it

<bigger><bigger>cool?</bigger></bigger>

--unique-boundary-1

Content-Type: message/rfc822

From: (mailbox in US-ASCII)

To: (address in US-ASCII)

Subject: (subject in US-ASCII)

Content-Type: Text/plain; charset=ISO-8859-1

Content-Transfer-Encoding: Quoted-printable

... Additional text in ISO-8859-1 goes here ...

--unique-boundary-1--

2.6. Conditions à remplir par un MUA MIME

2.6.1. Reconnaitre et afficher du texte US-ASCII
2.6.2. Reconnaitre les autres jeux de caractères
2.6.3. Reconnaitre et afficher les caratères ISO-8859-* commun à ceux présent dans US-ASCII
2.6.4. Offrir de sauver les contenus non reconnus dans un fichier pour traitement ultérieur
2.6.5. Reconnaitre et afficher les contenus de type Message/rfc822
2.6.6. Reconnaitre le type Multipart/mixed
2.6.7. Reconnaitre le type Multipart/alternative
2.6.8. Traiter les Multipart/* non reconnus comme Multipart/mixed
2.6.9. Décoder les contenus de Application/* si l'encodage quoted-printable ou base64 est utilisé, puis offrir de sauver le résultat dans un fichier.

2.7. Exemples de MUA MIME

2.7.1. Domaine public

2.7.1.1. eml
2.7.1.2. pine
2.7.1.3. mh
2.7.1.4. xmh
2.7.1.5. mixmh
2.7.1.6. exmh
2.7.1.7. meuf
2.7.1.8. ml

2.7.2. Payant

2.7.2.1. Z-mail

3. Comment transferer des caractères 8 bits?

3.1. ESMTP, extension de SMTP (RFC 1651)

Le client utilise le mot clef HELO à la place de EHLO

Si le serveur est OK, il repond la liste des services supportes.

250-mailhost.mondomaine.fr Hello client.autredomaine.fr [193.55.0.1], pleased to meet you

250-EXPN

250-SIZE

250-8BITMIME

250 HELP

3.2. Extension ESMTP 8BIT-MIME (RFC 1652)

Si l'option 8BITMIME est supportée par le serveur, le client peut l'utiliser dans le champs RCPT-TO: pour indiquer que la suite est du 8 bits. Le message transmis doit avoir des en-têtes MIME valides.

Exemple:

RCPT TO: <jean.dupont@mondomaine.fr> BODY=8BITMIME

250 <jean.dupont@mondomaine.fr>... Sender and 8BITMIME ok

4. RFCs

1864 DS J. Myers, M. Rose, "The Content-MD5 Header Field", 10/24/1995. (Pages=4) (Format=.txt) (Obsoletes RFC1544)

1844 I E. Huizer, "Multimedia E-mail (MIME) User Agent checklist",08/24/1995. (Pages=8) (Format=.txt) (Obsoletes RFC1820)

1830 E G. Vaudreuil, "SMTP Service Extensions for Transmission of Large and Binary MIME Messages", 08/16/1995. (Pages=8) (Format=.txt)

1767 PS D. Crocker, "MIME Encapsulation of EDI Objects", 03/02/1995. (Pages=7) (Format=.txt)

1741 I P. Faltstrom, D. Crocker, E. Fair, "MIME Content Type for BinHex Encoded Files", 12/22/1994. (Pages=6) (Format=.txt)

1740 PS P. Faltstrom, D. Crocker, E. Fair, "MIME Encapsulation of Macintosh files - MacMIME", 12/22/1994. (Pages=16) (Format=.txt)

1653 DS J. Klensin, N. Freed, K. Moore, "SMTP Service Extension for Message Size Declaration", 07/18/1994. (Pages=8) (Format=.txt) (Obsoletes RFC1427)

1652 DS J. Klensin, N. Freed, M. Rose, E. Stefferud, D. Crocker, "SMTP Service Extension for 8bit-MIMEtransport", 07/18/1994. (Pages=6) (Format=.txt) (Obsoletes RFC1426)

1651 DS J. Klensin, N. Freed, M. Rose, E. Stefferud, D. Crocker, "SMTP Service Extensions", 07/18/1994. (Pages=11) (Format=.txt) (Obsoletes RFC1425)

1641 E D. Goldsmith, M. Davis, "Using Unicode with MIME", 07/13/1994. (Pages=6) (Format=.txt, .ps)

1590 I J. Postel, "Media Type Registration Procedure", 03/02/1994. (Pages=7) (Format=.txt) (Updates RFC1521)

1563 I N. Borenstein, "The text/enriched MIME Content-type", 01/10/1994. (Pages=16) (Format=.txt, .ps) (Obsoletes RFC1523)

1556 I H. Nussbacher, "Handling of Bi-directional Texts in MIME", 12/23/1993. (Pages=3) (Format=.txt)

1522 DS K. Moore, "MIME (Multipurpose Internet Mail Extensions) Part Two: Message Header Extensions for Non-ASCII Text", 09/23/1993. (Pages=10) (Format=.txt) (Obsoletes RFC1342)

1521 DS N. Borenstein, N. Freed, "MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies", 09/23/1993. (Pages=81) (Format=.txt, .ps) (Obsoletes RFC1341) (Updated by RFC1590)

1496 PS H. Alvestrand, J. Romaguera, K. Jordan, "Rules for downgrading messages from X.400/88 to X.400/84 when MIME content-types are present in the messages", 08/26/1993. (Pages=7) (Format=.txt) (Updates RFC1328)

1437 I N. Borenstein, M. Linimon, "The Extension of MIME Content-Types to a New Medium", 04/01/1993. (Pages=6) (Format=.txt)

1428 I G. Vaudreuil, "Transition of Internet Mail from Just-Send-8 to 8Bit-SMTP/MIME", 02/10/1993. (Pages=6) (Format=.txt)

1427 PS K. Moore, N. Freed, J. Klensin, "SMTP Service Extension for Message Size Declaration", 02/10/1993. (Pages=8) (Format=.txt) (Obsoleted by RFC1653)

1344 I N. Borenstein, "Implications of MIME for Internet Mail Gateways", 06/11/1992. (Pages=9) (Format=.txt, .ps)

1343 I N. Borenstein, "A User Agent Configuration Mechanism For Multimedia Mail Format Information", 06/11/1992. (Pages=10) (Format=.txt, .ps)

1123 S R. Braden, "Requirements for Internet hosts - application and support", 10/01/1989. (Pages=98) (Format=.txt) (STD 3)

0822 S D. Crocker, "Standard for the format of ARPA Internet text messages", 08/13/1982. (Pages=47) (Format=.txt) (Obsoletes RFC0733) (STD 11) (Updated by RFC1327, RFC0987)

0821 S J. Postel, "Simple Mail Transfer Protocol", 08/01/1982. (Pages=58) (Format=.txt) (Obsoletes RFC0788) (STD 10)