aboutsummaryrefslogtreecommitdiffstats
path: root/mime64/mime.txt
blob: 109e481c0da7359b5364715101b249215d6ab094 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
                            MIME Overview

                by Mark Grand <mark@premenos.sf.ca.us>

Internet e-mail allows mail messages to be exchanged between users of
computers around the world and occasionally beyond... to space
shuttles.  One of the main reasons that Internet e-mail has achieved
such wide use is because it provides a standard mechanism for messages
to be exchanged between over 1,000,000 computers connected to the
Internet.

The standards that are the basis for Internet e-mail were established
in 1982.  Though they were state of the art in 1982, in the
intervening years they have begun to show their age.  The 1982
standards allow for mail messages that contain a single human readable
message with the restrictions that:

    * the message contains only ASCII characters.

    * the message contains no lines longer than 1000 characters.

    * the message does not exceed a certain length

The 1982 standards do not allow EDI to be transmitted through Internet
mail, since EDI messages can violate all of these restrictions.  There
are a number of other types of messages and services that have are
supported by other mail standards that have been designed more
recently.  In June of 1992 a new Internet mail standard was approved.
This new standard is called MIME.

MIME is an acronym for Multipurpose Internet Mail Extensions.  It
builds on the older standard by standardizing additional fields for
mail message headers that describe new types of content and
organization for messages.

MIME allows mail messages to contain:

    * Multiple objects in a single message.

    * Text having unlimited line length or overall length.

    * Character sets other than ASCII.

    * Multi-font messages.

    * Binary or application specific files.

    * Images, Audio, Video and multi-media messages.

MIME defines the following new header fields:

1.  A MIME-Version header field, which uses a version number to
    declare that a message conforms to the MIME standard.

2.  A Content-Type header field, which can be used to specify the type
    and subtype of data in the body of a message and to fully specify
    the encoding of such data.

    2.a.  A Text Content-Type value, which can be used to represent
          textual information in a number of character sets and
          formatted text description languages in a standardized
          manner.

    2.b.  A Multipart Content-Type value, which can be used to combine
          several body parts, possibly of differing types of data,
          into a single message.

    2.c.  An Application Content-Type value, which can be used to
          transmit application data or binary data.

    2.d.  A Message Content-Type value, for encapsulating a mail
          message.

    2.e.  An Image Content-Type value, for transmitting still image
          (picture) data.

    2.f.  An Audio Content-Type value, for transmitting audio or voice
          data.

    2.g.  A Video Content-Type value, for transmitting video or moving
          image data, possibly with audio as part of the composite
          video data format.

3.  A Content-Transfer-Encoding header field, that specifies how the
    data is encoded to allow it to pass through mail transports having
    data or character set limitations.

4.  Two optional header fields that can be used to further describe
    the data in a message body, the Content-ID and Content-Description
    header fields.

MIME is an extensible mechanism.  It is expected that the set of
content-type/subtype pairs and their associated parameters will grow
with time.  Several other MIME fields, such as character set names,
are likely to have new values defined over time.  To ensure that the
set of such values develops in an orderly, and public manner, MIME
defines a registration process which uses the Internet Assigned
Numbers Authority (IANA) as a central registry for such values.

To promote interoperability between implementations, the MIME standard
document specifies a minimal subset of the above mechanisms that are
required for an implementation to claim to conform to the MIME
standard.



                        MIME Technical Summary

MIME is defined by an Internet standard document called RFC 1341.
This document summarizes the contents of RFC 1341.  Sufficient detail
is presented here to understand the capabilities of MIME.  For
sufficient detail to implement MIME please read RFC 1341.

MIME allows messages to contain multiple objects.  When multiple
objects are in a MIME message, they are represented in a form called a
body part.  A body part has a header and a body, so it makes sense to
speak about the body of a body part. Also, body parts can be nested in
bodies that contain one or multiple body parts.

The Content-Type values, subtypes, and parameter names defined in the
MIME standard are not case insensitive.  However, many parameter
values are case sensitive.

The MIME standard is written to allow MIME to be extended in certain
ways, without having to revise the standard.  MIME specifies sets of
values that are allowed for various fields and parameters.  The
provides a procedure for extending these sets of values by registering
them with an entity called the Internet Assigned Numbers Authority
(IANA).


The MIME-Version Header Field

MIME is designed to be compatible with older Internet mail standards.
In particular, it is compatible with RFC 822.  If a mail reading
program receives a message that is a MIME message then it will likely
perform additional processing for the MIME message that it would not
perform for non-MIME messages.  In order to allow mail reading
programs to recognize MIME messages, MIME messages are required to
contain a MIME-Version header field.  The MIME-Version header field
specifies the version of the MIME standard that the message conforms
to.

As of this writing there is only version (1.0) of the MIME standard.
Messages that comply with the standard must include a header field,
with the following verbatim text:

        MIME-Version: 1.0

The MIME-Version header field is required at the top level of a
message. It is not required for each body part of a multipart entity.
It is required for the embedded headers of a body of type "message" if
and only if the embedded message is claimed to be MIME-compliant.


The Content-Type Header Field

The Content-Type field describes the data contained in the body fully
enough that the mail reader can pick an appropriate mechanism to
present the data to the user, or otherwise deal with the data in an
appropriate manner.

The Content-Type header field is used to specify the nature of data in
the body or body part, by giving type and subtype identifiers, and by
providing parameters that may be needed for certain types.  After the
type and subtype names, the remainder of the header field is a set of
parameters, specified in an attribute/value notation.  The set of
meaningful parameters differs for different types.  The order of
parameters is not significant.  Comments are allowed (in accordance
with RFC 822 rules) in structured header fields by placing them in
parentheses.

The top-level Content-Type is used to declare the general type of
data, while the subtype specifies a specific format for that type of
data.  Thus, a Content-Type of Image/xyz is enough to tell a mail
reader that the data is an image, even if the mail reader has no
knowledge of the specific image format xyz.  Such information can be
used, to decide whether or not to show a user the raw data from an
unrecognized subtype -- such an action might be reasonable for
unrecognized subtypes of Text, but not for unrecognized subtypes of
Image or Audio.  For this reason, registered subtypes of Audio, Image,
Text, and Video, should not contain embedded information that is
really of a different type.  Such compound types are usually
represented using the Multipart or Application types.

Parameters are modifiers of the content-subtype.  Although most
parameters make sense only with certain content-types, others are
"global" in the sense that they might apply to any subtype.  For
example, the Boundary parameter, which is used to indicate how body
parts are separated from each other, makes sense only for the
Multipart content-type.  The Charset parameter might make sense with
several content-types.

The MIME standard defines seven content-types.  The authors of the
MIME standard state that the set of seven types is "substantially
complete".  They expect additional supported types to be accommodated
by creating new subtypes of the seven initial top-level types.  The
MIME standard, functioning as a constitution for the MIME community,
states that new standard content types can be defined only by revising
the standard (as opposed to the registration procedure for other types
of extensions).  However, MIME does provide for the use of
non-standard content types.  Non-standard content-types can be used,
but must be given names starting with X-.  Future standard content
type names will not begin with X-.

The syntax for the content type header field is

    Content-Type := type "/" subtype [";" parameter]...

The defined content types are:

    Application
        indicates data that does not fit into any of the other
        categories, such as uninterpreted binary data or information
        to be processed by a mail-based application. In addition to
        the following subtypes, it is likely that additional subtypes
        will be defined for applications such as mail-based scheduling
        systems, spreadsheets and EDI.

    Application/Octet-Stream
        indicates uninterpreted binary data, which a mail reading
        program may simply offer to write the information into a file.
        Possible parameters for Application/Octet-Stream include:

        Name
            a suggested name for the binary data if stored as a file.

        Type
            the general type or category of binary data.  This is
            intended for human recipients rather than for automated
            processing.

        Conversions
            the operations that performed on the data before putting
            it the body.  Note that the standard defines no conversion
            values.  Any conversion values that do not begin with X-
            must be preceded by a published specification and by
            registration with IANA.

        Padding
            the number of bits of padding that were appended to the
            bitstream comprising the actual contents to produce the
            enclosed byte-oriented data.  This is useful for enclosing
            a bitstream in a body when the total number of bits is not
            a multiple of the byte size.

    Application/ODA
        indicates a body containing information encoded according to
        the Office Document Architecture (ODA) standards, using the
        ODIF representation format.  For Application/ODA, the
        Content-Type line should also specify an attribute/value pair
        that indicates the document application profile (DAP), using a
        Profile parameter.  Thus an appropriate header field might
        look like this:

            Content-Type: application/oda;
                          profile=Q112

        Consult the ODA standard for further information.

    Application/PostScript
        indicates a body containing a postscript document.

Audio
    Indicates audio data.  Audio requires an audio output device (such
    as a speaker or a telephone) to "display" the contents.

    Audio/Basic
        The content of the Audio/Basic subtype is audio encoded using
        8-bit ISDN u-law. When this subtype is present, a sample rate
        of 8000 Hz and a single channel is assumed.

    Image
        Image data.  Image requires a display device (such as a
        graphical display, a printer, or a FAX machine) to view the
        information.

    Image/Jpeg
        indicates an image in JPEG format.

    Image/Gif
        indicates an image in GIF format.

Message
    indicates an encapsulated message.

    Message/Rfc822
        indicates that the body contains an encapsulated message, with
        the syntax of an RFC 822 message.

    Message/Partial
        indicates a partial message, allowing fragmented transmission
        of bodies too large to be passed through mail transport
        facilities.  Message/Partial indicates that the body contains
        a fragment of a larger message.

        Three parameters are required in a Content-Type field of type
        Message/Partial: The first, Id, is a unique identifier, as
        close to world-unique as possible, used to match the parts
        together.  The second, Number, an integer, is the part number
        indicating where this part fits into the sequence of
        fragments.  The third, Total, another integer, is the total
        number of parts. Total is required on the final part, and
        optional on earlier parts.

    Message/External-Body
        indicates that the actual body data are not included, but
        merely referenced.  In this case, the parameters describe a
        mechanism for accessing the external data.

        When a body or body part is of type Message/External-Body,
        it consists of a header, a blank line, and the message header
        for the encapsulated message.  If another blank line appears,
        this ends the message header for the encapsulated message.
        However, since the encapsulated message's body is itself
        external, it does not appear in the area that follows.  For
        example, consider this message:

            Content-type: message/external-body;
                          access-type=local-file;
                          name=/u/nsb/Me.gif

            Content-type: image/gif

            THIS IS NOT REALLY THE BODY!

        The area at the end, which constitutes a phantom body, is
        ignored for most external-body messages.  However, it may be
        used to contain auxiliary information for a
        "mail-server".

        The only parameter of Message/External�Body that is always
        mandatory is Access-Type.  Its other parameters are mandatory
        or optional depending on the value of Access-Type.  The values
        defined for the Access-Type parameter are FTP, ANON-FTP, TFTP,
        AFS, LOCAL-FILE, and MAIL-SERVER.  Except for values beginning
        with X-, other values must be registered with IANA.

        The standard also specifies additional parameters that are to
        be used in conjunction with the various access types.

        In addition to access-type specific parameters, the standard
        defines the following parameters which are optional for all
        access types:

            * The Expiration parameter is used to specify a date after
              which the existence of the external data is not
              guaranteed. 

            * The Size parameter is used to specify the size of the
              data.

Multipart

    indicates data consisting of multiple body parts; each having its
    own data type.  It is possible to tell where each body part begins
    and ends because each body part is preceded by a special string
    called an encapsulation boundary; the last body part is followed
    by a closing boundary.

    The boundary strings used are specified by a mandatory parameter
    called Boundary.  The encapsulation boundary is an end of line
    followed by two hyphens followed by the boundary parameter value
    of the Content�Type header field.  The closing boundary is the
    same as the encapsulation boundary with the addition of two
    hyphens at the end of the line.

    The encapsulation boundary must not appear inside any of the
    encapsulated parts.  It is crucial that the composing user agent
    be able to choose and specify the unique boundary that will
    separate the body parts.  Encapsulation boundaries may be no
    longer than 70 characters, not counting the blank line and leading
    hyphens.

    Thus, a typical multipart Content-Type header field might look
    like:

        Content-Type: multipart/mixed; boundary=gc0y0pkb9ex

    This indicates a body consisting of several body parts, each
    having a structure syntactically identical to an RFC 822 message,
    except that the header area may be completely empty, and each part
    is preceded by the line

        --gc0y0pkb9ex

    The closing boundary following the last body part indicates that
    no further body parts will follow.  It is identical to the
    preceding encapsulation boundaries, with the addition of two more
    hyphens at the end of the line:

        --gc0y0pkb9ex--

    There is room for additional information prior to the first
    encapsulation boundary and following the final boundary.  These
    areas are often blank.  Anything appearing before the first or
    after the last boundary is ignored.

    As a simple example, the following multipart message has two
    parts, both plain text, one explicitly typed and one implicitly
    typed:

        From: Nathaniel Borenstein <nsb@bellcore.com>
        To: Ned Freed <ned@innosoft.com>
        Subject: Sample message
        MIME-Version: 1.0
        Content-type: multipart/mixed;
                      boundary="simple boundary"

        This is the preamble.  It is to be ignored, though it is a
        handy place for mail composers to include an explanatory note
        to non-MIME compliant readers.

        --simple boundary

        This is implicitly typed plain ASCII text.
        --simple boundary
        Content-type: text/plain; charset=us-ascii

        This is explicitly typed plain ASCII text.
        It DOES end with a line break.

        --simple boundary--
        This is the epilogue.  It is also to be ignored.

    The use of a Content-Type of multipart in a body part within
    another multipart entity is explicitly allowed.  In such cases,
    care must be taken to ensure that each nested multipart entity
    uses a different boundary delimiter.

    The use of the multipart Content-Type with only a single body part
    may be useful in certain contexts, and is explicitly permitted.

    Multipart/Mixed
        indicates multiple independent body parts to be viewed
        serially.

    Multipart/Alternative
        is syntactically identical to Multipart/Mixed.  Each part is
        an "alternative" version of the same information.  Mail
        readers should recognize that the content of the parts are
        interchangeable.  The mail reader should either choose the
        "best" type based on the user's environment and preferences,
        or offer the user the available alternatives.  Generally,
        choosing the best type means displaying only the last part
        that can be displayed.  This may be used, for example, to send
        mail in a fancy text format in such a way that it can easily
        be displayed anywhere:

            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

            ...plain text version of message goes here...
            --boundary42
            Content-Type: text/richtext

            ... richtext version of same message goes here ...
            --boundary42
            Content-Type: text/x-whatever

            ... fanciest formatted version of same message goes here
            ...
            --boundary42--

        In this example, users whose mail system understood the
        text/x-whatever format would see only the fancy version,
        while other users would see only the richtext or plain text
        version, depending on the capabilities of their system.

        Some mail reading programs that recognize more than one of the
        formats will offer the user a choice of which format to view.
        This makes sense, for example, if mail includes both a nicely
        formatted image version and an easily edited text version.
        The point is that multiple versions of the same data are not
        automatically shown.  Either the user is shown the last
        recognized version or explicitly given the choice.

    Multipart/Parallel
        is syntactically identical to Multipart/Mixed.  However, in a
        parallel body, all of the body parts are intended to be
        presented simultaneously on hardware and software that are
        capable of doing so.  Composing agents should be aware that
        many mail readers will lack this capability and will show the
        parts serially in any event.

        Multipart/Parallel will likely be used for multimedia messages
        that combine such message types as text, audio and/or video.

    Multipart/Digest
        Indicates that each of the body parts is an RFC 822 mail
        message.  Multipart/Digest is syntactically identical to
        Multipart/Mixed, except that the default Content-Type value
        for a body part is changed from Text/Plain to Message/Rfc822.

Text
    The text Content-Type is for sending material that is principally
    textual in form.  It is the default Content-Type.  A Charset
    parameter may be used to indicate the character set of the text.
    The default Content-Type for Internet mail is
        text/plain; Charset=US-ASCII.

    The value of the Charset parameter is not case sensitive.
    Allowable values are US-ASCII, ISO-8859-1, ISO-8859-2, ... and
    ISO-8859-9. The default value for Charset is US-ASCII.

    Text/Plain
        indicates plain (unformatted) text.  No special software is
        required to get the full meaning of the text, aside from
        support for the indicated character set.  Other subtypes
        should be used for enriched text in forms where application
        software may enhance the appearance of the text, but such
        software must not be required in order to get the general idea
        of the content.  Possible future subtypes include any readable
        word processor format.

    Text/Richtext
        indicates a simple portable word processing format that is
        defined by the MIME standard.  It is a very small subset of
        SGML.  Mail readers that implement Richtext may implement only
        a subset of it.

        When a mail composing program is given a file in a word
        processing format to send and there is no standardized subtype
        for that format, then the message composing program may
        reformat the file into richtext format which will preserve
        more of the original formatting information than reformatting
        the file to plain ASCII.

Video
    indicates that the body contains a time-varying-picture image,
    possibly with color and coordinated sound.  The term Video is
    used very generically and does not refer to any particular
    technology or format.  It is not meant to preclude subtypes
    such as animated drawings encoded compactly.

    Video/Mpeg
        indicates video coded according to the MPEG standard.

x-TypeName
    This is any type name that begins with X-.  A Content-Type value
    beginning with X- is a private value, to be used by consenting
    mail systems by mutual agreement.  The standard specifies no
    subtypes.

No type may be specified without a subtype.

The standard allows the use of additional sub-types without having to
change the standard.  However, it is important to insure that
sub-types used by different user communities of MIME do not conflict.
It would be confusing if Content-Type: application/foobar meant two
different things.  The standard specifies two mechanisms for defining
new Content-Type subtypes:

1.  Private values (starting with X-) may be defined between
    cooperating mail composing and reading programs without outside
    registration.  Use of this mechanism requires knowing that the
    reader of the message will not mistake the content type for
    something other than originally intended.

2.  New standard values must be registered with IANA.  Where intended
    for public use, the formats they refer to must also be defined by
    a published specification.

Messages that do not have a Content-Type field in their header are
displayed by user agents as if

    Content-Type: Text/plain; Charset=US-ASCII

had been specified.

When a mail reader encounters mail with an unknown Content-Type value,
it will generally treat it as equivalent to application/octet-stream.


The Content-Transfer-Encoding Header Field

Many Content-Types which could usefully be transported via e-mail are
represented, in their "natural" format, as 8-bit character or binary
data.  Such data cannot be transmitted over some transport protocols.
For example, SMTP (Simple Mail Transfer Protocol is an Internet
standard for transporting e-mail defined by a document called RFC 821)
restricts mail messages to 7-bit ASCII data with lines no longer than
1000 characters.

MIME provides two mechanisms for re-encoding such data into a 7-bit
short-line format.  The Content-Transfer-Encoding header field
indicates the mechanism used to perform such an encoding.  The
Content-Transfer-Encoding field indicates the transformation that has
been used to represent the body in an acceptable manner for transport.

The possible values for the Content-Transfer-Encoding field are:
        BASE64
        QUOTED-PRINTABLE
        8BIT
        7BIT
        BINARY
        x-EncodingName
These values are not case sensitive.  That is, Base64, BASE64 and
bAsE64 are all equivalent.  An encoding type of 7BIT requires that the
body is already in a 7-bit mail-ready representation.  That is the
default value: Content-Transfer-Encoding: 7BIT is assumed if the
Content-Transfer-Encoding header field is not present.

Both BASE64 and the QUOTED-PRINTABLE imply an encoding that consists
of lines no longer than 76 ASCII characters.  In other respects the
two encoding schemes are very different.

The encoding scheme implied by QUOTED-PRINTABLE is most appropriate
for data that consists primarily of printable ASCII characters. Using
this encoding method, printable ASCII character are represented as
themselves.  The equals sign (=) serves as an escape character.  Any
character that is not a printable or white space ASCII character is
represented as an equals sign followed by two hexadecimal digits.  An
equals sign in the message is also represented in this way.  Lines
that are longer than 76 characters are cut off after the 75th
character and the line ends with a equals sign.

The advantages of using the QUOTED-PRINTABLE encoding for message that
are mostly printable ASCII characters are that few additional
characters are required and the message can be read by human beings
who to not have a MIME aware mail reading program.  As an example,
here is an EDI interchange in QUOTED-PRINTABLE encoding:

ISA*00*          *00*          *01*987654321      *12*8005551234     *910=
607*0111*U*00200*110000777*0*T*>
GS*PO*987654321*8005551234*920501*2032*7721*X*002003
ST*850*000000001
BEG*00*NE*MS1112**920501**CONTRACT#
REF*IT*8128827763
N1*ST*MAVERICK SYSTEMS
N3*3312 NEW HAMPSHIRE STREET
N4*SAN JOSE*CA*94811
PO1*1*25*EA***VC*TP8MM*CB*TAPE8MM
PO1*2*30*EA***VC*TP1/4*CB*TAPE1/4INCH
PO1*3*125*EA***VC*DSK31/2*CB*DISK35
CTT*3
SE*11*000000001
GE*1*7721
IEA*1*110000777

Except for the ISA segment having been wrapped onto two lines, the
QUOTED-PRINTABLE encoding of the interchange is identical to its 7BIT
representation.

The BASE64 encoding mechanism is well suited for representing binary
files.  It represents any sequence of three bytes as four printable
ASCII characters.  The same interchange as shown above but using the
BASE64 encoding would look like:

SVNBKjAwKiAgICAgICAgICAqMDAqICAgICAgICAgICowMSo5ODc2NTQzMjEgICAgICAqMTIq
ODAwNTU1MTIzNCAgICAgKjkxMDYwNyowMTExKlUqMDAyMDAqMTEwMDAwNzc3KjAqVCo+CkdT
KlBPKjk4NzY1NDMyMSo4MDA1NTUxMjM0KjkyMDUwMSoyMDMyKjc3MjEqWCowMDIwMDMKU1Qq
ODUwKjAwMDAwMDAwMQpCRUcqMDAqTkUqTVMxMTEyKio5MjA1MDEqKkNPTlRSQUNUIwpSRUYq
SVQqODEyODgyNzc2MwpOMSpTVCpNQVZFUklDSyBTWVNURU1TCk4zKjMzMTIgTkVXIEhBTVBT
SElSRSBTVFJFRVQKTjQqU0FOIEpPU0UqQ0EqOTQ4MTEKUE8xKjEqMjUqRUEqKipWQypUUDhN
TSpDQipUQVBFOE1NClBPMSoyKjMwKkVBKioqVkMqVFAxLzQqQ0IqVEFQRTEvNElOQ0gKUE8x
KjMqMTI1KkVBKioqVkMqRFNLMzEvMipDQipESVNLMzUKQ1RUKjMKU0UqMTEqMDAwMDAwMDAx
CkdFKjEqNzcyMQpJRUEqMSoxMTAwMDA3NzcK

BASE64 bears some resemblance to uuencode in both appearance and
function.  However, uuencode uses characters that may not be processed
properly by an EBCDIC gateway.

The values 8bit, 7bit, and binary all imply that no encoding has been
performed. However, they are useful to indicate of the kind of data
contained in the object, and therefore of the kind of encoding that
might need to be performed for transmission in a given transport
system.  7bit means that the data is all represented as short lines of
ASCII data.  8bit means that the lines are short, but there may be
non-ASCII characters.  Binary means that not only may non-ASCII
characters be present, but also that the lines are not necessarily
short enough for SMTP transport.

The difference between 8bit and binary is that binary does not require
adherence to any limits on line length.  8bit and binary are intended
for compatibility with future Internet e-mail transport standards and
with gateways to non-Internet environments.  As of this writing there
are no standardized Internet e-mail transports for which it is
legitimate to include unencoded 8-bit or binary data in mail bodies.

Note that the five values defined for the Content-Transfer-Encoding
field imply nothing about the Content-Type other than the algorithm by
which it was encoded or the transport system requirements if
unencoded.

Some implementations may support additional Content-Transfer-Encoding
values (it is permitted but strongly discouraged by the standard).
Any such additional values must have names that begin with X- to
indicate its non-standard status For example:

        Content-Transfer-Encoding: x-my-new-encoding.

If a Content-Transfer-Encoding header field appears as part of a
message header, it applies to the entire body of that message.  If a
Content-Transfer-Encoding header field appears as part of a body
part's headers, it applies only to the body of that body part.  If a
message or body part is of type Multipart or Message, the
Content-Transfer-Encoding must be 7bit, 8bit or Binary.

The encoding mechanisms defined here explicitly encode all data in
ASCII.  Thus, for example, suppose a message or body part has header
fields such as:

        Content-Type: text/plain; charset=ISO-8859-1
        Content-transfer-encoding: base64

This should be interpreted to mean that the body is a Base64 ASCII
encoding of data that was originally in ISO-8859-1, and will be in
that character set again after decoding.


Optional Content-ID Header Field

It may be desirable to allow one body to reference another.
Accordingly, bodies may be labeled using the Content-ID header field,
which is syntactically identical to the RFC 822 Message-ID header
field: Content-ID values should be be as unique as possible.


Optional Content-Description Header Field

The ability to associate descriptive information with a body is often
desirable. For example, it may be useful to mark an Image body as
"a picture of the Space Shuttle Endeavor."  Such text may be
placed in the Content-Description header field.


Summary

Using MIME-Version, Content-Type, and Content-Transfer-Encoding header
fields, it is possible to include arbitrary types of data objects in
RFC 822 conformant mail messages.  No restrictions imposed by RFC 821
or RFC 822 are violated. MIME has been designed to avoid problems
caused by additional restrictions imposed by some Internet mail
transport mechanisms. The Multipart and Message content types allow
mixing and hierarchical structuring of objects of different types in a
single message.  Further content types provide a mechanism for tagging
messages or body parts as audio, image, or other kinds of data.  A
parameter syntax allows further specification of data format details,
particularly the specification of alternate character sets.
Additional optional header fields provide mechanisms for certain
extensions deemed desirable by many implementors.  Finally, a number
of useful content types are defined for general use by consenting user
agents, notably Text/Richtext, Message/Partial, and
Message/External-Body.

To promote interoperability between user agents, the MIME standard
specifies a minimal subset of MIME features a user agent must support
to be considered MIME conformant.


A Complex Multipart Example

The outline of a complex multipart message follows.  This message has
five parts to be displayed serially: two introductory plain text
parts, an embedded multipart message, a richtext part, and a closing
encapsulated text message in a non-ASCII character set.  The embedded
multipart message has two parts to be displayed in parallel, a picture
and an audio fragment.

    MIME-Version: 1.0
    From: Nathaniel Borenstein <nsb@bellcore.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
    u-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><nl><nl>Isn't it
    <bigger><bigger>cool?</bigger></bigger>

    --unique-boundary-1
    Content-Type: message/rfc822

    From: (name 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--