rack-mail_exception 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +22 -0
- data/LICENSE +20 -0
- data/README.rdoc +38 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/lib/rack/mail_exception.rb +103 -0
- data/test/helper.rb +13 -0
- data/test/test_rack_mail_exception.rb +93 -0
- data/vendor/mail/.bundle/config +2 -0
- data/vendor/mail/CHANGELOG.rdoc +370 -0
- data/vendor/mail/Dependencies.txt +3 -0
- data/vendor/mail/Gemfile +17 -0
- data/vendor/mail/README.rdoc +572 -0
- data/vendor/mail/ROADMAP +92 -0
- data/vendor/mail/Rakefile +41 -0
- data/vendor/mail/TODO.rdoc +9 -0
- data/vendor/mail/lib/mail.rb +76 -0
- data/vendor/mail/lib/mail/attachments_list.rb +99 -0
- data/vendor/mail/lib/mail/body.rb +287 -0
- data/vendor/mail/lib/mail/configuration.rb +67 -0
- data/vendor/mail/lib/mail/core_extensions/blank.rb +26 -0
- data/vendor/mail/lib/mail/core_extensions/nil.rb +11 -0
- data/vendor/mail/lib/mail/core_extensions/string.rb +27 -0
- data/vendor/mail/lib/mail/elements.rb +14 -0
- data/vendor/mail/lib/mail/elements/address.rb +306 -0
- data/vendor/mail/lib/mail/elements/address_list.rb +74 -0
- data/vendor/mail/lib/mail/elements/content_disposition_element.rb +30 -0
- data/vendor/mail/lib/mail/elements/content_location_element.rb +25 -0
- data/vendor/mail/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
- data/vendor/mail/lib/mail/elements/content_type_element.rb +35 -0
- data/vendor/mail/lib/mail/elements/date_time_element.rb +26 -0
- data/vendor/mail/lib/mail/elements/envelope_from_element.rb +34 -0
- data/vendor/mail/lib/mail/elements/message_ids_element.rb +29 -0
- data/vendor/mail/lib/mail/elements/mime_version_element.rb +26 -0
- data/vendor/mail/lib/mail/elements/phrase_list.rb +21 -0
- data/vendor/mail/lib/mail/elements/received_element.rb +30 -0
- data/vendor/mail/lib/mail/encodings.rb +258 -0
- data/vendor/mail/lib/mail/encodings/7bit.rb +31 -0
- data/vendor/mail/lib/mail/encodings/8bit.rb +31 -0
- data/vendor/mail/lib/mail/encodings/base64.rb +33 -0
- data/vendor/mail/lib/mail/encodings/binary.rb +31 -0
- data/vendor/mail/lib/mail/encodings/quoted_printable.rb +38 -0
- data/vendor/mail/lib/mail/encodings/transfer_encoding.rb +58 -0
- data/vendor/mail/lib/mail/envelope.rb +35 -0
- data/vendor/mail/lib/mail/field.rb +223 -0
- data/vendor/mail/lib/mail/field_list.rb +33 -0
- data/vendor/mail/lib/mail/fields.rb +35 -0
- data/vendor/mail/lib/mail/fields/bcc_field.rb +56 -0
- data/vendor/mail/lib/mail/fields/cc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/comments_field.rb +41 -0
- data/vendor/mail/lib/mail/fields/common/address_container.rb +16 -0
- data/vendor/mail/lib/mail/fields/common/common_address.rb +125 -0
- data/vendor/mail/lib/mail/fields/common/common_date.rb +42 -0
- data/vendor/mail/lib/mail/fields/common/common_field.rb +50 -0
- data/vendor/mail/lib/mail/fields/common/common_message_id.rb +43 -0
- data/vendor/mail/lib/mail/fields/common/parameter_hash.rb +52 -0
- data/vendor/mail/lib/mail/fields/content_description_field.rb +19 -0
- data/vendor/mail/lib/mail/fields/content_disposition_field.rb +69 -0
- data/vendor/mail/lib/mail/fields/content_id_field.rb +63 -0
- data/vendor/mail/lib/mail/fields/content_location_field.rb +42 -0
- data/vendor/mail/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
- data/vendor/mail/lib/mail/fields/content_type_field.rb +185 -0
- data/vendor/mail/lib/mail/fields/date_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/from_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/in_reply_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/keywords_field.rb +44 -0
- data/vendor/mail/lib/mail/fields/message_id_field.rb +83 -0
- data/vendor/mail/lib/mail/fields/mime_version_field.rb +53 -0
- data/vendor/mail/lib/mail/fields/optional_field.rb +13 -0
- data/vendor/mail/lib/mail/fields/received_field.rb +67 -0
- data/vendor/mail/lib/mail/fields/references_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/reply_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_bcc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_cc_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_date_field.rb +35 -0
- data/vendor/mail/lib/mail/fields/resent_from_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/resent_message_id_field.rb +34 -0
- data/vendor/mail/lib/mail/fields/resent_sender_field.rb +62 -0
- data/vendor/mail/lib/mail/fields/resent_to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/return_path_field.rb +64 -0
- data/vendor/mail/lib/mail/fields/sender_field.rb +67 -0
- data/vendor/mail/lib/mail/fields/structured_field.rb +51 -0
- data/vendor/mail/lib/mail/fields/subject_field.rb +16 -0
- data/vendor/mail/lib/mail/fields/to_field.rb +55 -0
- data/vendor/mail/lib/mail/fields/unstructured_field.rb +166 -0
- data/vendor/mail/lib/mail/header.rb +262 -0
- data/vendor/mail/lib/mail/mail.rb +234 -0
- data/vendor/mail/lib/mail/message.rb +1867 -0
- data/vendor/mail/lib/mail/network.rb +9 -0
- data/vendor/mail/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
- data/vendor/mail/lib/mail/network/delivery_methods/sendmail.rb +62 -0
- data/vendor/mail/lib/mail/network/delivery_methods/smtp.rb +110 -0
- data/vendor/mail/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
- data/vendor/mail/lib/mail/network/retriever_methods/imap.rb +18 -0
- data/vendor/mail/lib/mail/network/retriever_methods/pop3.rb +149 -0
- data/vendor/mail/lib/mail/parsers/address_lists.rb +64 -0
- data/vendor/mail/lib/mail/parsers/address_lists.treetop +19 -0
- data/vendor/mail/lib/mail/parsers/content_disposition.rb +387 -0
- data/vendor/mail/lib/mail/parsers/content_disposition.treetop +46 -0
- data/vendor/mail/lib/mail/parsers/content_location.rb +139 -0
- data/vendor/mail/lib/mail/parsers/content_location.treetop +20 -0
- data/vendor/mail/lib/mail/parsers/content_transfer_encoding.rb +162 -0
- data/vendor/mail/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
- data/vendor/mail/lib/mail/parsers/content_type.rb +539 -0
- data/vendor/mail/lib/mail/parsers/content_type.treetop +58 -0
- data/vendor/mail/lib/mail/parsers/date_time.rb +114 -0
- data/vendor/mail/lib/mail/parsers/date_time.treetop +11 -0
- data/vendor/mail/lib/mail/parsers/envelope_from.rb +194 -0
- data/vendor/mail/lib/mail/parsers/envelope_from.treetop +32 -0
- data/vendor/mail/lib/mail/parsers/message_ids.rb +45 -0
- data/vendor/mail/lib/mail/parsers/message_ids.treetop +15 -0
- data/vendor/mail/lib/mail/parsers/mime_version.rb +144 -0
- data/vendor/mail/lib/mail/parsers/mime_version.treetop +19 -0
- data/vendor/mail/lib/mail/parsers/phrase_lists.rb +45 -0
- data/vendor/mail/lib/mail/parsers/phrase_lists.treetop +15 -0
- data/vendor/mail/lib/mail/parsers/received.rb +71 -0
- data/vendor/mail/lib/mail/parsers/received.treetop +11 -0
- data/vendor/mail/lib/mail/parsers/rfc2045.rb +464 -0
- data/vendor/mail/lib/mail/parsers/rfc2045.treetop +36 -0
- data/vendor/mail/lib/mail/parsers/rfc2822.rb +5318 -0
- data/vendor/mail/lib/mail/parsers/rfc2822.treetop +410 -0
- data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
- data/vendor/mail/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
- data/vendor/mail/lib/mail/part.rb +102 -0
- data/vendor/mail/lib/mail/parts_list.rb +34 -0
- data/vendor/mail/lib/mail/patterns.rb +30 -0
- data/vendor/mail/lib/mail/utilities.rb +181 -0
- data/vendor/mail/lib/mail/version.rb +10 -0
- data/vendor/mail/lib/mail/version_specific/ruby_1_8.rb +97 -0
- data/vendor/mail/lib/mail/version_specific/ruby_1_9.rb +87 -0
- data/vendor/mail/lib/tasks/corpus.rake +125 -0
- data/vendor/mail/lib/tasks/treetop.rake +10 -0
- data/vendor/mail/mail.gemspec +20 -0
- data/vendor/mail/reference/US ASCII Table.txt +130 -0
- data/vendor/mail/reference/rfc1035 Domain Implementation and Specification.txt +3083 -0
- data/vendor/mail/reference/rfc1049 Content-Type Header Field for Internet Messages.txt +451 -0
- data/vendor/mail/reference/rfc1344 Implications of MIME for Internet Mail Gateways.txt +586 -0
- data/vendor/mail/reference/rfc1345 Character Mnemonics & Character Sets.txt +5761 -0
- data/vendor/mail/reference/rfc1524 A User Agent Configuration Mechanism For Multimedia Mail Format Information.txt +675 -0
- data/vendor/mail/reference/rfc1652 SMTP Service Extension for 8bit-MIMEtransport.txt +339 -0
- data/vendor/mail/reference/rfc1892 Multipart Report .txt +227 -0
- data/vendor/mail/reference/rfc1893 Mail System Status Codes.txt +843 -0
- data/vendor/mail/reference/rfc2045 Multipurpose Internet Mail Extensions (1).txt +1739 -0
- data/vendor/mail/reference/rfc2046 Multipurpose Internet Mail Extensions (2).txt +2467 -0
- data/vendor/mail/reference/rfc2047 Multipurpose Internet Mail Extensions (3).txt +843 -0
- data/vendor/mail/reference/rfc2048 Multipurpose Internet Mail Extensions (4).txt +1180 -0
- data/vendor/mail/reference/rfc2049 Multipurpose Internet Mail Extensions (5).txt +1347 -0
- data/vendor/mail/reference/rfc2111 Content-ID and Message-ID URLs.txt +283 -0
- data/vendor/mail/reference/rfc2183 Content-Disposition Header Field.txt +675 -0
- data/vendor/mail/reference/rfc2231 MIME Parameter Value and Encoded Word Extensions.txt +563 -0
- data/vendor/mail/reference/rfc2387 MIME Multipart-Related Content-type.txt +563 -0
- data/vendor/mail/reference/rfc2821 Simple Mail Transfer Protocol.txt +3711 -0
- data/vendor/mail/reference/rfc2822 Internet Message Format.txt +2859 -0
- data/vendor/mail/reference/rfc3462 Reporting of Mail System Administrative Messages.txt +396 -0
- data/vendor/mail/reference/rfc3696 Checking and Transformation of Names.txt +898 -0
- data/vendor/mail/reference/rfc4155 The application-mbox Media Type.txt +502 -0
- data/vendor/mail/reference/rfc4234 Augmented BNF for Syntax Specifications: ABNF.txt +899 -0
- data/vendor/mail/reference/rfc822 Standard for the Format of ARPA Internet Text Messages.txt +2900 -0
- data/vendor/mail/spec/environment.rb +15 -0
- data/vendor/mail/spec/features/making_a_new_message.feature +14 -0
- data/vendor/mail/spec/features/steps/env.rb +6 -0
- data/vendor/mail/spec/features/steps/making_a_new_message_steps.rb +11 -0
- data/vendor/mail/spec/fixtures/attachments/basic_email.eml +31 -0
- data/vendor/mail/spec/fixtures/attachments/test.gif +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.jpg +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.pdf +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.png +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.tiff +0 -0
- data/vendor/mail/spec/fixtures/attachments/test.zip +0 -0
- data/vendor/mail/spec/fixtures/attachments//343/201/246/343/201/231/343/201/250.txt +2 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_disposition.eml +29 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_content_location.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_message_rfc822.eml +92 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_only_email.eml +17 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_pdf.eml +70 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_encoded_name.eml +47 -0
- data/vendor/mail/spec/fixtures/emails/attachment_emails/attachment_with_quoted_filename.eml +60 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/cant_parse_from.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_7-bit.eml +231 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_empty.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_plain.eml +148 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_qp_with_space.eml +53 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_spam.eml +44 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_text-html.eml +50 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_8bits.eml +770 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_with_semi_colon.eml +269 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/content_transfer_encoding_x_uuencode.eml +79 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/empty_group_lists.eml +162 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/header_fields_with_empty_values.eml +33 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/missing_body.eml +16 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/missing_content_disposition.eml +43 -0
- data/vendor/mail/spec/fixtures/emails/error_emails/multiple_content_types.eml +25 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email11.eml +34 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email12.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email2.eml +114 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email4.eml +59 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email7.eml +66 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_encoded_stack_level_too_deep.eml +53 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_illegal_boundary.eml +58 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_mimepart_without_content_type.eml +94 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_multipart_mixed_quoted_boundary.eml +50 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_nested_attachment.eml +100 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/raw_email_with_quoted_illegal_boundary.eml +58 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/sig_only_email.eml +29 -0
- data/vendor/mail/spec/fixtures/emails/mime_emails/two_from_in_message.eml +42 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment.eml +27 -0
- data/vendor/mail/spec/fixtures/emails/multi_charset/japanese_attachment_long_name.eml +44 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce1.eml +179 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/multi_address_bounce2.eml +179 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_422.eml +98 -0
- data/vendor/mail/spec/fixtures/emails/multipart_report_emails/report_530.eml +97 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/basic_email.eml +31 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email10.eml +20 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email5.eml +19 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email6.eml +20 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email8.eml +47 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_bad_time.eml +62 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_double_at_in_header.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_incorrect_header.eml +28 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_multiple_from.eml +30 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_quoted_with_0d0a.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_reply.eml +32 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_simple.eml +11 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_string_in_date_field.eml +17 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_trailing_dot.eml +21 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_bad_date.eml +48 -0
- data/vendor/mail/spec/fixtures/emails/plain_emails/raw_email_with_partially_quoted_subject.eml +14 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example01.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example02.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example03.eml +7 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example04.eml +7 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example05.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example06.eml +10 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example07.eml +9 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example08.eml +12 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example09.eml +15 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example10.eml +15 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example11.eml +6 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example12.eml +8 -0
- data/vendor/mail/spec/fixtures/emails/rfc2822/example13.eml +10 -0
- data/vendor/mail/spec/fixtures/emails/sample_output_multipart +0 -0
- data/vendor/mail/spec/mail/attachments_list_spec.rb +214 -0
- data/vendor/mail/spec/mail/body_spec.rb +385 -0
- data/vendor/mail/spec/mail/configuration_spec.rb +19 -0
- data/vendor/mail/spec/mail/core_extensions/string_spec.rb +62 -0
- data/vendor/mail/spec/mail/core_extensions_spec.rb +99 -0
- data/vendor/mail/spec/mail/elements/address_list_spec.rb +109 -0
- data/vendor/mail/spec/mail/elements/address_spec.rb +609 -0
- data/vendor/mail/spec/mail/elements/date_time_element_spec.rb +20 -0
- data/vendor/mail/spec/mail/elements/envelope_from_element_spec.rb +31 -0
- data/vendor/mail/spec/mail/elements/message_ids_element_spec.rb +43 -0
- data/vendor/mail/spec/mail/elements/phrase_list_spec.rb +22 -0
- data/vendor/mail/spec/mail/elements/received_element_spec.rb +34 -0
- data/vendor/mail/spec/mail/encoding_spec.rb +189 -0
- data/vendor/mail/spec/mail/encodings/base64_spec.rb +25 -0
- data/vendor/mail/spec/mail/encodings/quoted_printable_spec.rb +25 -0
- data/vendor/mail/spec/mail/encodings_spec.rb +664 -0
- data/vendor/mail/spec/mail/example_emails_spec.rb +303 -0
- data/vendor/mail/spec/mail/field_list_spec.rb +33 -0
- data/vendor/mail/spec/mail/field_spec.rb +198 -0
- data/vendor/mail/spec/mail/fields/bcc_field_spec.rb +89 -0
- data/vendor/mail/spec/mail/fields/cc_field_spec.rb +79 -0
- data/vendor/mail/spec/mail/fields/comments_field_spec.rb +25 -0
- data/vendor/mail/spec/mail/fields/common/address_container_spec.rb +18 -0
- data/vendor/mail/spec/mail/fields/common/common_address_spec.rb +132 -0
- data/vendor/mail/spec/mail/fields/common/common_date_spec.rb +25 -0
- data/vendor/mail/spec/mail/fields/common/common_field_spec.rb +69 -0
- data/vendor/mail/spec/mail/fields/common/common_message_id_spec.rb +30 -0
- data/vendor/mail/spec/mail/fields/common/parameter_hash_spec.rb +56 -0
- data/vendor/mail/spec/mail/fields/content_description_field_spec.rb +39 -0
- data/vendor/mail/spec/mail/fields/content_disposition_field_spec.rb +55 -0
- data/vendor/mail/spec/mail/fields/content_id_field_spec.rb +117 -0
- data/vendor/mail/spec/mail/fields/content_location_field_spec.rb +46 -0
- data/vendor/mail/spec/mail/fields/content_transfer_encoding_field_spec.rb +113 -0
- data/vendor/mail/spec/mail/fields/content_type_field_spec.rb +678 -0
- data/vendor/mail/spec/mail/fields/date_field_spec.rb +73 -0
- data/vendor/mail/spec/mail/fields/envelope_spec.rb +48 -0
- data/vendor/mail/spec/mail/fields/from_field_spec.rb +89 -0
- data/vendor/mail/spec/mail/fields/in_reply_to_field_spec.rb +62 -0
- data/vendor/mail/spec/mail/fields/keywords_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/message_id_field_spec.rb +147 -0
- data/vendor/mail/spec/mail/fields/mime_version_field_spec.rb +166 -0
- data/vendor/mail/spec/mail/fields/received_field_spec.rb +44 -0
- data/vendor/mail/spec/mail/fields/references_field_spec.rb +35 -0
- data/vendor/mail/spec/mail/fields/reply_to_field_spec.rb +67 -0
- data/vendor/mail/spec/mail/fields/resent_bcc_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_cc_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_date_field_spec.rb +39 -0
- data/vendor/mail/spec/mail/fields/resent_from_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/resent_message_id_field_spec.rb +24 -0
- data/vendor/mail/spec/mail/fields/resent_sender_field_spec.rb +58 -0
- data/vendor/mail/spec/mail/fields/resent_to_field_spec.rb +66 -0
- data/vendor/mail/spec/mail/fields/return_path_field_spec.rb +52 -0
- data/vendor/mail/spec/mail/fields/sender_field_spec.rb +58 -0
- data/vendor/mail/spec/mail/fields/structured_field_spec.rb +72 -0
- data/vendor/mail/spec/mail/fields/to_field_spec.rb +92 -0
- data/vendor/mail/spec/mail/fields/unstructured_field_spec.rb +134 -0
- data/vendor/mail/spec/mail/header_spec.rb +578 -0
- data/vendor/mail/spec/mail/mail_spec.rb +34 -0
- data/vendor/mail/spec/mail/message_spec.rb +1409 -0
- data/vendor/mail/spec/mail/mime_messages_spec.rb +435 -0
- data/vendor/mail/spec/mail/multipart_report_spec.rb +112 -0
- data/vendor/mail/spec/mail/network/delivery_methods/file_delivery_spec.rb +79 -0
- data/vendor/mail/spec/mail/network/delivery_methods/sendmail_spec.rb +125 -0
- data/vendor/mail/spec/mail/network/delivery_methods/smtp_spec.rb +133 -0
- data/vendor/mail/spec/mail/network/delivery_methods/test_mailer_spec.rb +57 -0
- data/vendor/mail/spec/mail/network/retriever_methods/pop3_spec.rb +180 -0
- data/vendor/mail/spec/mail/network_spec.rb +359 -0
- data/vendor/mail/spec/mail/parsers/address_lists_parser_spec.rb +15 -0
- data/vendor/mail/spec/mail/parsers/content_transfer_encoding_parser_spec.rb +72 -0
- data/vendor/mail/spec/mail/part_spec.rb +129 -0
- data/vendor/mail/spec/mail/parts_list_spec.rb +12 -0
- data/vendor/mail/spec/mail/round_tripping_spec.rb +44 -0
- data/vendor/mail/spec/mail/utilities_spec.rb +327 -0
- data/vendor/mail/spec/mail/version_specific/escape_paren_1_8_spec.rb +32 -0
- data/vendor/mail/spec/matchers/break_down_to.rb +35 -0
- data/vendor/mail/spec/spec_helper.rb +163 -0
- metadata +442 -0
@@ -0,0 +1,2467 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
Network Working Group N. Freed
|
7
|
+
Request for Comments: 2046 Innosoft
|
8
|
+
Obsoletes: 1521, 1522, 1590 N. Borenstein
|
9
|
+
Category: Standards Track First Virtual
|
10
|
+
November 1996
|
11
|
+
|
12
|
+
|
13
|
+
Multipurpose Internet Mail Extensions
|
14
|
+
(MIME) Part Two:
|
15
|
+
Media Types
|
16
|
+
|
17
|
+
Status of this Memo
|
18
|
+
|
19
|
+
This document specifies an Internet standards track protocol for the
|
20
|
+
Internet community, and requests discussion and suggestions for
|
21
|
+
improvements. Please refer to the current edition of the "Internet
|
22
|
+
Official Protocol Standards" (STD 1) for the standardization state
|
23
|
+
and status of this protocol. Distribution of this memo is unlimited.
|
24
|
+
|
25
|
+
Abstract
|
26
|
+
|
27
|
+
STD 11, RFC 822 defines a message representation protocol specifying
|
28
|
+
considerable detail about US-ASCII message headers, but which leaves
|
29
|
+
the message content, or message body, as flat US-ASCII text. This
|
30
|
+
set of documents, collectively called the Multipurpose Internet Mail
|
31
|
+
Extensions, or MIME, redefines the format of messages to allow for
|
32
|
+
|
33
|
+
(1) textual message bodies in character sets other than
|
34
|
+
US-ASCII,
|
35
|
+
|
36
|
+
(2) an extensible set of different formats for non-textual
|
37
|
+
message bodies,
|
38
|
+
|
39
|
+
(3) multi-part message bodies, and
|
40
|
+
|
41
|
+
(4) textual header information in character sets other than
|
42
|
+
US-ASCII.
|
43
|
+
|
44
|
+
These documents are based on earlier work documented in RFC 934, STD
|
45
|
+
11, and RFC 1049, but extends and revises them. Because RFC 822 said
|
46
|
+
so little about message bodies, these documents are largely
|
47
|
+
orthogonal to (rather than a revision of) RFC 822.
|
48
|
+
|
49
|
+
The initial document in this set, RFC 2045, specifies the various
|
50
|
+
headers used to describe the structure of MIME messages. This second
|
51
|
+
document defines the general structure of the MIME media typing
|
52
|
+
system and defines an initial set of media types. The third document,
|
53
|
+
RFC 2047, describes extensions to RFC 822 to allow non-US-ASCII text
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
Freed & Borenstein Standards Track [Page 1]
|
58
|
+
|
59
|
+
RFC 2046 Media Types November 1996
|
60
|
+
|
61
|
+
|
62
|
+
data in Internet mail header fields. The fourth document, RFC 2048,
|
63
|
+
specifies various IANA registration procedures for MIME-related
|
64
|
+
facilities. The fifth and final document, RFC 2049, describes MIME
|
65
|
+
conformance criteria as well as providing some illustrative examples
|
66
|
+
of MIME message formats, acknowledgements, and the bibliography.
|
67
|
+
|
68
|
+
These documents are revisions of RFCs 1521 and 1522, which themselves
|
69
|
+
were revisions of RFCs 1341 and 1342. An appendix in RFC 2049
|
70
|
+
describes differences and changes from previous versions.
|
71
|
+
|
72
|
+
Table of Contents
|
73
|
+
|
74
|
+
1. Introduction ......................................... 3
|
75
|
+
2. Definition of a Top-Level Media Type ................. 4
|
76
|
+
3. Overview Of The Initial Top-Level Media Types ........ 4
|
77
|
+
4. Discrete Media Type Values ........................... 6
|
78
|
+
4.1 Text Media Type ..................................... 6
|
79
|
+
4.1.1 Representation of Line Breaks ..................... 7
|
80
|
+
4.1.2 Charset Parameter ................................. 7
|
81
|
+
4.1.3 Plain Subtype ..................................... 11
|
82
|
+
4.1.4 Unrecognized Subtypes ............................. 11
|
83
|
+
4.2 Image Media Type .................................... 11
|
84
|
+
4.3 Audio Media Type .................................... 11
|
85
|
+
4.4 Video Media Type .................................... 12
|
86
|
+
4.5 Application Media Type .............................. 12
|
87
|
+
4.5.1 Octet-Stream Subtype .............................. 13
|
88
|
+
4.5.2 PostScript Subtype ................................ 14
|
89
|
+
4.5.3 Other Application Subtypes ........................ 17
|
90
|
+
5. Composite Media Type Values .......................... 17
|
91
|
+
5.1 Multipart Media Type ................................ 17
|
92
|
+
5.1.1 Common Syntax ..................................... 19
|
93
|
+
5.1.2 Handling Nested Messages and Multiparts ........... 24
|
94
|
+
5.1.3 Mixed Subtype ..................................... 24
|
95
|
+
5.1.4 Alternative Subtype ............................... 24
|
96
|
+
5.1.5 Digest Subtype .................................... 26
|
97
|
+
5.1.6 Parallel Subtype .................................. 27
|
98
|
+
5.1.7 Other Multipart Subtypes .......................... 28
|
99
|
+
5.2 Message Media Type .................................. 28
|
100
|
+
5.2.1 RFC822 Subtype .................................... 28
|
101
|
+
5.2.2 Partial Subtype ................................... 29
|
102
|
+
5.2.2.1 Message Fragmentation and Reassembly ............ 30
|
103
|
+
5.2.2.2 Fragmentation and Reassembly Example ............ 31
|
104
|
+
5.2.3 External-Body Subtype ............................. 33
|
105
|
+
5.2.4 Other Message Subtypes ............................ 40
|
106
|
+
6. Experimental Media Type Values ....................... 40
|
107
|
+
7. Summary .............................................. 41
|
108
|
+
8. Security Considerations .............................. 41
|
109
|
+
9. Authors' Addresses ................................... 42
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
Freed & Borenstein Standards Track [Page 2]
|
114
|
+
|
115
|
+
RFC 2046 Media Types November 1996
|
116
|
+
|
117
|
+
|
118
|
+
A. Collected Grammar .................................... 43
|
119
|
+
|
120
|
+
1. Introduction
|
121
|
+
|
122
|
+
The first document in this set, RFC 2045, defines a number of header
|
123
|
+
fields, including Content-Type. The Content-Type field is used to
|
124
|
+
specify the nature of the data in the body of a MIME entity, by
|
125
|
+
giving media type and subtype identifiers, and by providing auxiliary
|
126
|
+
information that may be required for certain media types. After the
|
127
|
+
type and subtype names, the remainder of the header field is simply a
|
128
|
+
set of parameters, specified in an attribute/value notation. The
|
129
|
+
ordering of parameters is not significant.
|
130
|
+
|
131
|
+
In general, the top-level media type is used to declare the general
|
132
|
+
type of data, while the subtype specifies a specific format for that
|
133
|
+
type of data. Thus, a media type of "image/xyz" is enough to tell a
|
134
|
+
user agent that the data is an image, even if the user agent has no
|
135
|
+
knowledge of the specific image format "xyz". Such information can
|
136
|
+
be used, for example, to decide whether or not to show a user the raw
|
137
|
+
data from an unrecognized subtype -- such an action might be
|
138
|
+
reasonable for unrecognized subtypes of "text", but not for
|
139
|
+
unrecognized subtypes of "image" or "audio". For this reason,
|
140
|
+
registered subtypes of "text", "image", "audio", and "video" should
|
141
|
+
not contain embedded information that is really of a different type.
|
142
|
+
Such compound formats should be represented using the "multipart" or
|
143
|
+
"application" types.
|
144
|
+
|
145
|
+
Parameters are modifiers of the media subtype, and as such do not
|
146
|
+
fundamentally affect the nature of the content. The set of
|
147
|
+
meaningful parameters depends on the media type and subtype. Most
|
148
|
+
parameters are associated with a single specific subtype. However, a
|
149
|
+
given top-level media type may define parameters which are applicable
|
150
|
+
to any subtype of that type. Parameters may be required by their
|
151
|
+
defining media type or subtype or they may be optional. MIME
|
152
|
+
implementations must also ignore any parameters whose names they do
|
153
|
+
not recognize.
|
154
|
+
|
155
|
+
MIME's Content-Type header field and media type mechanism has been
|
156
|
+
carefully designed to be extensible, and it is expected that the set
|
157
|
+
of media type/subtype pairs and their associated parameters will grow
|
158
|
+
significantly over time. Several other MIME facilities, such as
|
159
|
+
transfer encodings and "message/external-body" access types, are
|
160
|
+
likely to have new values defined over time. In order to ensure that
|
161
|
+
the set of such values is developed in an orderly, well-specified,
|
162
|
+
and public manner, MIME sets up a registration process which uses the
|
163
|
+
Internet Assigned Numbers Authority (IANA) as a central registry for
|
164
|
+
MIME's various areas of extensibility. The registration process for
|
165
|
+
these areas is described in a companion document, RFC 2048.
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
Freed & Borenstein Standards Track [Page 3]
|
170
|
+
|
171
|
+
RFC 2046 Media Types November 1996
|
172
|
+
|
173
|
+
|
174
|
+
The initial seven standard top-level media type are defined and
|
175
|
+
described in the remainder of this document.
|
176
|
+
|
177
|
+
2. Definition of a Top-Level Media Type
|
178
|
+
|
179
|
+
The definition of a top-level media type consists of:
|
180
|
+
|
181
|
+
(1) a name and a description of the type, including
|
182
|
+
criteria for whether a particular type would qualify
|
183
|
+
under that type,
|
184
|
+
|
185
|
+
(2) the names and definitions of parameters, if any, which
|
186
|
+
are defined for all subtypes of that type (including
|
187
|
+
whether such parameters are required or optional),
|
188
|
+
|
189
|
+
(3) how a user agent and/or gateway should handle unknown
|
190
|
+
subtypes of this type,
|
191
|
+
|
192
|
+
(4) general considerations on gatewaying entities of this
|
193
|
+
top-level type, if any, and
|
194
|
+
|
195
|
+
(5) any restrictions on content-transfer-encodings for
|
196
|
+
entities of this top-level type.
|
197
|
+
|
198
|
+
3. Overview Of The Initial Top-Level Media Types
|
199
|
+
|
200
|
+
The five discrete top-level media types are:
|
201
|
+
|
202
|
+
(1) text -- textual information. The subtype "plain" in
|
203
|
+
particular indicates plain text containing no
|
204
|
+
formatting commands or directives of any sort. Plain
|
205
|
+
text is intended to be displayed "as-is". No special
|
206
|
+
software is required to get the full meaning of the
|
207
|
+
text, aside from support for the indicated character
|
208
|
+
set. Other subtypes are to be used for enriched text in
|
209
|
+
forms where application software may enhance the
|
210
|
+
appearance of the text, but such software must not be
|
211
|
+
required in order to get the general idea of the
|
212
|
+
content. Possible subtypes of "text" thus include any
|
213
|
+
word processor format that can be read without
|
214
|
+
resorting to software that understands the format. In
|
215
|
+
particular, formats that employ embeddded binary
|
216
|
+
formatting information are not considered directly
|
217
|
+
readable. A very simple and portable subtype,
|
218
|
+
"richtext", was defined in RFC 1341, with a further
|
219
|
+
revision in RFC 1896 under the name "enriched".
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
|
224
|
+
|
225
|
+
Freed & Borenstein Standards Track [Page 4]
|
226
|
+
|
227
|
+
RFC 2046 Media Types November 1996
|
228
|
+
|
229
|
+
|
230
|
+
(2) image -- image data. "Image" requires a display device
|
231
|
+
(such as a graphical display, a graphics printer, or a
|
232
|
+
FAX machine) to view the information. An initial
|
233
|
+
subtype is defined for the widely-used image format
|
234
|
+
JPEG. . subtypes are defined for two widely-used image
|
235
|
+
formats, jpeg and gif.
|
236
|
+
|
237
|
+
(3) audio -- audio data. "Audio" requires an audio output
|
238
|
+
device (such as a speaker or a telephone) to "display"
|
239
|
+
the contents. An initial subtype "basic" is defined in
|
240
|
+
this document.
|
241
|
+
|
242
|
+
(4) video -- video data. "Video" requires the capability
|
243
|
+
to display moving images, typically including
|
244
|
+
specialized hardware and software. An initial subtype
|
245
|
+
"mpeg" is defined in this document.
|
246
|
+
|
247
|
+
(5) application -- some other kind of data, typically
|
248
|
+
either uninterpreted binary data or information to be
|
249
|
+
processed by an application. The subtype "octet-
|
250
|
+
stream" is to be used in the case of uninterpreted
|
251
|
+
binary data, in which case the simplest recommended
|
252
|
+
action is to offer to write the information into a file
|
253
|
+
for the user. The "PostScript" subtype is also defined
|
254
|
+
for the transport of PostScript material. Other
|
255
|
+
expected uses for "application" include spreadsheets,
|
256
|
+
data for mail-based scheduling systems, and languages
|
257
|
+
for "active" (computational) messaging, and word
|
258
|
+
processing formats that are not directly readable.
|
259
|
+
Note that security considerations may exist for some
|
260
|
+
types of application data, most notably
|
261
|
+
"application/PostScript" and any form of active
|
262
|
+
messaging. These issues are discussed later in this
|
263
|
+
document.
|
264
|
+
|
265
|
+
The two composite top-level media types are:
|
266
|
+
|
267
|
+
(1) multipart -- data consisting of multiple entities of
|
268
|
+
independent data types. Four subtypes are initially
|
269
|
+
defined, including the basic "mixed" subtype specifying
|
270
|
+
a generic mixed set of parts, "alternative" for
|
271
|
+
representing the same data in multiple formats,
|
272
|
+
"parallel" for parts intended to be viewed
|
273
|
+
simultaneously, and "digest" for multipart entities in
|
274
|
+
which each part has a default type of "message/rfc822".
|
275
|
+
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
Freed & Borenstein Standards Track [Page 5]
|
282
|
+
|
283
|
+
RFC 2046 Media Types November 1996
|
284
|
+
|
285
|
+
|
286
|
+
(2) message -- an encapsulated message. A body of media
|
287
|
+
type "message" is itself all or a portion of some kind
|
288
|
+
of message object. Such objects may or may not in turn
|
289
|
+
contain other entities. The "rfc822" subtype is used
|
290
|
+
when the encapsulated content is itself an RFC 822
|
291
|
+
message. The "partial" subtype is defined for partial
|
292
|
+
RFC 822 messages, to permit the fragmented transmission
|
293
|
+
of bodies that are thought to be too large to be passed
|
294
|
+
through transport facilities in one piece. Another
|
295
|
+
subtype, "external-body", is defined for specifying
|
296
|
+
large bodies by reference to an external data source.
|
297
|
+
|
298
|
+
It should be noted that the list of media type values given here may
|
299
|
+
be augmented in time, via the mechanisms described above, and that
|
300
|
+
the set of subtypes is expected to grow substantially.
|
301
|
+
|
302
|
+
4. Discrete Media Type Values
|
303
|
+
|
304
|
+
Five of the seven initial media type values refer to discrete bodies.
|
305
|
+
The content of these types must be handled by non-MIME mechanisms;
|
306
|
+
they are opaque to MIME processors.
|
307
|
+
|
308
|
+
4.1. Text Media Type
|
309
|
+
|
310
|
+
The "text" media type is intended for sending material which is
|
311
|
+
principally textual in form. A "charset" parameter may be used to
|
312
|
+
indicate the character set of the body text for "text" subtypes,
|
313
|
+
notably including the subtype "text/plain", which is a generic
|
314
|
+
subtype for plain text. Plain text does not provide for or allow
|
315
|
+
formatting commands, font attribute specifications, processing
|
316
|
+
instructions, interpretation directives, or content markup. Plain
|
317
|
+
text is seen simply as a linear sequence of characters, possibly
|
318
|
+
interrupted by line breaks or page breaks. Plain text may allow the
|
319
|
+
stacking of several characters in the same position in the text.
|
320
|
+
Plain text in scripts like Arabic and Hebrew may also include
|
321
|
+
facilitites that allow the arbitrary mixing of text segments with
|
322
|
+
opposite writing directions.
|
323
|
+
|
324
|
+
Beyond plain text, there are many formats for representing what might
|
325
|
+
be known as "rich text". An interesting characteristic of many such
|
326
|
+
representations is that they are to some extent readable even without
|
327
|
+
the software that interprets them. It is useful, then, to
|
328
|
+
distinguish them, at the highest level, from such unreadable data as
|
329
|
+
images, audio, or text represented in an unreadable form. In the
|
330
|
+
absence of appropriate interpretation software, it is reasonable to
|
331
|
+
show subtypes of "text" to the user, while it is not reasonable to do
|
332
|
+
so with most nontextual data. Such formatted textual data should be
|
333
|
+
represented using subtypes of "text".
|
334
|
+
|
335
|
+
|
336
|
+
|
337
|
+
Freed & Borenstein Standards Track [Page 6]
|
338
|
+
|
339
|
+
RFC 2046 Media Types November 1996
|
340
|
+
|
341
|
+
|
342
|
+
4.1.1. Representation of Line Breaks
|
343
|
+
|
344
|
+
The canonical form of any MIME "text" subtype MUST always represent a
|
345
|
+
line break as a CRLF sequence. Similarly, any occurrence of CRLF in
|
346
|
+
MIME "text" MUST represent a line break. Use of CR and LF outside of
|
347
|
+
line break sequences is also forbidden.
|
348
|
+
|
349
|
+
This rule applies regardless of format or character set or sets
|
350
|
+
involved.
|
351
|
+
|
352
|
+
NOTE: The proper interpretation of line breaks when a body is
|
353
|
+
displayed depends on the media type. In particular, while it is
|
354
|
+
appropriate to treat a line break as a transition to a new line when
|
355
|
+
displaying a "text/plain" body, this treatment is actually incorrect
|
356
|
+
for other subtypes of "text" like "text/enriched" [RFC-1896].
|
357
|
+
Similarly, whether or not line breaks should be added during display
|
358
|
+
operations is also a function of the media type. It should not be
|
359
|
+
necessary to add any line breaks to display "text/plain" correctly,
|
360
|
+
whereas proper display of "text/enriched" requires the appropriate
|
361
|
+
addition of line breaks.
|
362
|
+
|
363
|
+
NOTE: Some protocols defines a maximum line length. E.g. SMTP [RFC-
|
364
|
+
821] allows a maximum of 998 octets before the next CRLF sequence.
|
365
|
+
To be transported by such protocols, data which includes too long
|
366
|
+
segments without CRLF sequences must be encoded with a suitable
|
367
|
+
content-transfer-encoding.
|
368
|
+
|
369
|
+
4.1.2. Charset Parameter
|
370
|
+
|
371
|
+
A critical parameter that may be specified in the Content-Type field
|
372
|
+
for "text/plain" data is the character set. This is specified with a
|
373
|
+
"charset" parameter, as in:
|
374
|
+
|
375
|
+
Content-type: text/plain; charset=iso-8859-1
|
376
|
+
|
377
|
+
Unlike some other parameter values, the values of the charset
|
378
|
+
parameter are NOT case sensitive. The default character set, which
|
379
|
+
must be assumed in the absence of a charset parameter, is US-ASCII.
|
380
|
+
|
381
|
+
The specification for any future subtypes of "text" must specify
|
382
|
+
whether or not they will also utilize a "charset" parameter, and may
|
383
|
+
possibly restrict its values as well. For other subtypes of "text"
|
384
|
+
than "text/plain", the semantics of the "charset" parameter should be
|
385
|
+
defined to be identical to those specified here for "text/plain",
|
386
|
+
i.e., the body consists entirely of characters in the given charset.
|
387
|
+
In particular, definers of future "text" subtypes should pay close
|
388
|
+
attention to the implications of multioctet character sets for their
|
389
|
+
subtype definitions.
|
390
|
+
|
391
|
+
|
392
|
+
|
393
|
+
Freed & Borenstein Standards Track [Page 7]
|
394
|
+
|
395
|
+
RFC 2046 Media Types November 1996
|
396
|
+
|
397
|
+
|
398
|
+
The charset parameter for subtypes of "text" gives a name of a
|
399
|
+
character set, as "character set" is defined in RFC 2045. The rules
|
400
|
+
regarding line breaks detailed in the previous section must also be
|
401
|
+
observed -- a character set whose definition does not conform to
|
402
|
+
these rules cannot be used in a MIME "text" subtype.
|
403
|
+
|
404
|
+
An initial list of predefined character set names can be found at the
|
405
|
+
end of this section. Additional character sets may be registered
|
406
|
+
with IANA.
|
407
|
+
|
408
|
+
Other media types than subtypes of "text" might choose to employ the
|
409
|
+
charset parameter as defined here, but with the CRLF/line break
|
410
|
+
restriction removed. Therefore, all character sets that conform to
|
411
|
+
the general definition of "character set" in RFC 2045 can be
|
412
|
+
registered for MIME use.
|
413
|
+
|
414
|
+
Note that if the specified character set includes 8-bit characters
|
415
|
+
and such characters are used in the body, a Content-Transfer-Encoding
|
416
|
+
header field and a corresponding encoding on the data are required in
|
417
|
+
order to transmit the body via some mail transfer protocols, such as
|
418
|
+
SMTP [RFC-821].
|
419
|
+
|
420
|
+
The default character set, US-ASCII, has been the subject of some
|
421
|
+
confusion and ambiguity in the past. Not only were there some
|
422
|
+
ambiguities in the definition, there have been wide variations in
|
423
|
+
practice. In order to eliminate such ambiguity and variations in the
|
424
|
+
future, it is strongly recommended that new user agents explicitly
|
425
|
+
specify a character set as a media type parameter in the Content-Type
|
426
|
+
header field. "US-ASCII" does not indicate an arbitrary 7-bit
|
427
|
+
character set, but specifies that all octets in the body must be
|
428
|
+
interpreted as characters according to the US-ASCII character set.
|
429
|
+
National and application-oriented versions of ISO 646 [ISO-646] are
|
430
|
+
usually NOT identical to US-ASCII, and in that case their use in
|
431
|
+
Internet mail is explicitly discouraged. The omission of the ISO 646
|
432
|
+
character set from this document is deliberate in this regard. The
|
433
|
+
character set name of "US-ASCII" explicitly refers to the character
|
434
|
+
set defined in ANSI X3.4-1986 [US- ASCII]. The new international
|
435
|
+
reference version (IRV) of the 1991 edition of ISO 646 is identical
|
436
|
+
to US-ASCII. The character set name "ASCII" is reserved and must not
|
437
|
+
be used for any purpose.
|
438
|
+
|
439
|
+
NOTE: RFC 821 explicitly specifies "ASCII", and references an earlier
|
440
|
+
version of the American Standard. Insofar as one of the purposes of
|
441
|
+
specifying a media type and character set is to permit the receiver
|
442
|
+
to unambiguously determine how the sender intended the coded message
|
443
|
+
to be interpreted, assuming anything other than "strict ASCII" as the
|
444
|
+
default would risk unintentional and incompatible changes to the
|
445
|
+
semantics of messages now being transmitted. This also implies that
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
Freed & Borenstein Standards Track [Page 8]
|
450
|
+
|
451
|
+
RFC 2046 Media Types November 1996
|
452
|
+
|
453
|
+
|
454
|
+
messages containing characters coded according to other versions of
|
455
|
+
ISO 646 than US-ASCII and the 1991 IRV, or using code-switching
|
456
|
+
procedures (e.g., those of ISO 2022), as well as 8bit or multiple
|
457
|
+
octet character encodings MUST use an appropriate character set
|
458
|
+
specification to be consistent with MIME.
|
459
|
+
|
460
|
+
The complete US-ASCII character set is listed in ANSI X3.4- 1986.
|
461
|
+
Note that the control characters including DEL (0-31, 127) have no
|
462
|
+
defined meaning in apart from the combination CRLF (US-ASCII values
|
463
|
+
13 and 10) indicating a new line. Two of the characters have de
|
464
|
+
facto meanings in wide use: FF (12) often means "start subsequent
|
465
|
+
text on the beginning of a new page"; and TAB or HT (9) often (though
|
466
|
+
not always) means "move the cursor to the next available column after
|
467
|
+
the current position where the column number is a multiple of 8
|
468
|
+
(counting the first column as column 0)." Aside from these
|
469
|
+
conventions, any use of the control characters or DEL in a body must
|
470
|
+
either occur
|
471
|
+
|
472
|
+
(1) because a subtype of text other than "plain"
|
473
|
+
specifically assigns some additional meaning, or
|
474
|
+
|
475
|
+
(2) within the context of a private agreement between the
|
476
|
+
sender and recipient. Such private agreements are
|
477
|
+
discouraged and should be replaced by the other
|
478
|
+
capabilities of this document.
|
479
|
+
|
480
|
+
NOTE: An enormous proliferation of character sets exist beyond US-
|
481
|
+
ASCII. A large number of partially or totally overlapping character
|
482
|
+
sets is NOT a good thing. A SINGLE character set that can be used
|
483
|
+
universally for representing all of the world's languages in Internet
|
484
|
+
mail would be preferrable. Unfortunately, existing practice in
|
485
|
+
several communities seems to point to the continued use of multiple
|
486
|
+
character sets in the near future. A small number of standard
|
487
|
+
character sets are, therefore, defined for Internet use in this
|
488
|
+
document.
|
489
|
+
|
490
|
+
The defined charset values are:
|
491
|
+
|
492
|
+
(1) US-ASCII -- as defined in ANSI X3.4-1986 [US-ASCII].
|
493
|
+
|
494
|
+
(2) ISO-8859-X -- where "X" is to be replaced, as
|
495
|
+
necessary, for the parts of ISO-8859 [ISO-8859]. Note
|
496
|
+
that the ISO 646 character sets have deliberately been
|
497
|
+
omitted in favor of their 8859 replacements, which are
|
498
|
+
the designated character sets for Internet mail. As of
|
499
|
+
the publication of this document, the legitimate values
|
500
|
+
for "X" are the digits 1 through 10.
|
501
|
+
|
502
|
+
|
503
|
+
|
504
|
+
|
505
|
+
Freed & Borenstein Standards Track [Page 9]
|
506
|
+
|
507
|
+
RFC 2046 Media Types November 1996
|
508
|
+
|
509
|
+
|
510
|
+
Characters in the range 128-159 has no assigned meaning in ISO-8859-
|
511
|
+
X. Characters with values below 128 in ISO-8859-X have the same
|
512
|
+
assigned meaning as they do in US-ASCII.
|
513
|
+
|
514
|
+
Part 6 of ISO 8859 (Latin/Arabic alphabet) and part 8 (Latin/Hebrew
|
515
|
+
alphabet) includes both characters for which the normal writing
|
516
|
+
direction is right to left and characters for which it is left to
|
517
|
+
right, but do not define a canonical ordering method for representing
|
518
|
+
bi-directional text. The charset values "ISO-8859-6" and "ISO-8859-
|
519
|
+
8", however, specify that the visual method is used [RFC-1556].
|
520
|
+
|
521
|
+
All of these character sets are used as pure 7bit or 8bit sets
|
522
|
+
without any shift or escape functions. The meaning of shift and
|
523
|
+
escape sequences in these character sets is not defined.
|
524
|
+
|
525
|
+
The character sets specified above are the ones that were relatively
|
526
|
+
uncontroversial during the drafting of MIME. This document does not
|
527
|
+
endorse the use of any particular character set other than US-ASCII,
|
528
|
+
and recognizes that the future evolution of world character sets
|
529
|
+
remains unclear.
|
530
|
+
|
531
|
+
Note that the character set used, if anything other than US- ASCII,
|
532
|
+
must always be explicitly specified in the Content-Type field.
|
533
|
+
|
534
|
+
No character set name other than those defined above may be used in
|
535
|
+
Internet mail without the publication of a formal specification and
|
536
|
+
its registration with IANA, or by private agreement, in which case
|
537
|
+
the character set name must begin with "X-".
|
538
|
+
|
539
|
+
Implementors are discouraged from defining new character sets unless
|
540
|
+
absolutely necessary.
|
541
|
+
|
542
|
+
The "charset" parameter has been defined primarily for the purpose of
|
543
|
+
textual data, and is described in this section for that reason.
|
544
|
+
However, it is conceivable that non-textual data might also wish to
|
545
|
+
specify a charset value for some purpose, in which case the same
|
546
|
+
syntax and values should be used.
|
547
|
+
|
548
|
+
In general, composition software should always use the "lowest common
|
549
|
+
denominator" character set possible. For example, if a body contains
|
550
|
+
only US-ASCII characters, it SHOULD be marked as being in the US-
|
551
|
+
ASCII character set, not ISO-8859-1, which, like all the ISO-8859
|
552
|
+
family of character sets, is a superset of US-ASCII. More generally,
|
553
|
+
if a widely-used character set is a subset of another character set,
|
554
|
+
and a body contains only characters in the widely-used subset, it
|
555
|
+
should be labelled as being in that subset. This will increase the
|
556
|
+
chances that the recipient will be able to view the resulting entity
|
557
|
+
correctly.
|
558
|
+
|
559
|
+
|
560
|
+
|
561
|
+
Freed & Borenstein Standards Track [Page 10]
|
562
|
+
|
563
|
+
RFC 2046 Media Types November 1996
|
564
|
+
|
565
|
+
|
566
|
+
4.1.3. Plain Subtype
|
567
|
+
|
568
|
+
The simplest and most important subtype of "text" is "plain". This
|
569
|
+
indicates plain text that does not contain any formatting commands or
|
570
|
+
directives. Plain text is intended to be displayed "as-is", that is,
|
571
|
+
no interpretation of embedded formatting commands, font attribute
|
572
|
+
specifications, processing instructions, interpretation directives,
|
573
|
+
or content markup should be necessary for proper display. The
|
574
|
+
default media type of "text/plain; charset=us-ascii" for Internet
|
575
|
+
mail describes existing Internet practice. That is, it is the type
|
576
|
+
of body defined by RFC 822.
|
577
|
+
|
578
|
+
No other "text" subtype is defined by this document.
|
579
|
+
|
580
|
+
4.1.4. Unrecognized Subtypes
|
581
|
+
|
582
|
+
Unrecognized subtypes of "text" should be treated as subtype "plain"
|
583
|
+
as long as the MIME implementation knows how to handle the charset.
|
584
|
+
Unrecognized subtypes which also specify an unrecognized charset
|
585
|
+
should be treated as "application/octet- stream".
|
586
|
+
|
587
|
+
4.2. Image Media Type
|
588
|
+
|
589
|
+
A media type of "image" indicates that the body contains an image.
|
590
|
+
The subtype names the specific image format. These names are not
|
591
|
+
case sensitive. An initial subtype is "jpeg" for the JPEG format
|
592
|
+
using JFIF encoding [JPEG].
|
593
|
+
|
594
|
+
The list of "image" subtypes given here is neither exclusive nor
|
595
|
+
exhaustive, and is expected to grow as more types are registered with
|
596
|
+
IANA, as described in RFC 2048.
|
597
|
+
|
598
|
+
Unrecognized subtypes of "image" should at a miniumum be treated as
|
599
|
+
"application/octet-stream". Implementations may optionally elect to
|
600
|
+
pass subtypes of "image" that they do not specifically recognize to a
|
601
|
+
secure and robust general-purpose image viewing application, if such
|
602
|
+
an application is available.
|
603
|
+
|
604
|
+
NOTE: Using of a generic-purpose image viewing application this way
|
605
|
+
inherits the security problems of the most dangerous type supported
|
606
|
+
by the application.
|
607
|
+
|
608
|
+
4.3. Audio Media Type
|
609
|
+
|
610
|
+
A media type of "audio" indicates that the body contains audio data.
|
611
|
+
Although there is not yet a consensus on an "ideal" audio format for
|
612
|
+
use with computers, there is a pressing need for a format capable of
|
613
|
+
providing interoperable behavior.
|
614
|
+
|
615
|
+
|
616
|
+
|
617
|
+
Freed & Borenstein Standards Track [Page 11]
|
618
|
+
|
619
|
+
RFC 2046 Media Types November 1996
|
620
|
+
|
621
|
+
|
622
|
+
The initial subtype of "basic" is specified to meet this requirement
|
623
|
+
by providing an absolutely minimal lowest common denominator audio
|
624
|
+
format. It is expected that richer formats for higher quality and/or
|
625
|
+
lower bandwidth audio will be defined by a later document.
|
626
|
+
|
627
|
+
The content of the "audio/basic" subtype is single channel audio
|
628
|
+
encoded using 8bit ISDN mu-law [PCM] at a sample rate of 8000 Hz.
|
629
|
+
|
630
|
+
Unrecognized subtypes of "audio" should at a miniumum be treated as
|
631
|
+
"application/octet-stream". Implementations may optionally elect to
|
632
|
+
pass subtypes of "audio" that they do not specifically recognize to a
|
633
|
+
robust general-purpose audio playing application, if such an
|
634
|
+
application is available.
|
635
|
+
|
636
|
+
4.4. Video Media Type
|
637
|
+
|
638
|
+
A media type of "video" indicates that the body contains a time-
|
639
|
+
varying-picture image, possibly with color and coordinated sound.
|
640
|
+
The term 'video' is used in its most generic sense, rather than with
|
641
|
+
reference to any particular technology or format, and is not meant to
|
642
|
+
preclude subtypes such as animated drawings encoded compactly. The
|
643
|
+
subtype "mpeg" refers to video coded according to the MPEG standard
|
644
|
+
[MPEG].
|
645
|
+
|
646
|
+
Note that although in general this document strongly discourages the
|
647
|
+
mixing of multiple media in a single body, it is recognized that many
|
648
|
+
so-called video formats include a representation for synchronized
|
649
|
+
audio, and this is explicitly permitted for subtypes of "video".
|
650
|
+
|
651
|
+
Unrecognized subtypes of "video" should at a minumum be treated as
|
652
|
+
"application/octet-stream". Implementations may optionally elect to
|
653
|
+
pass subtypes of "video" that they do not specifically recognize to a
|
654
|
+
robust general-purpose video display application, if such an
|
655
|
+
application is available.
|
656
|
+
|
657
|
+
4.5. Application Media Type
|
658
|
+
|
659
|
+
The "application" media type is to be used for discrete data which do
|
660
|
+
not fit in any of the other categories, and particularly for data to
|
661
|
+
be processed by some type of application program. This is
|
662
|
+
information which must be processed by an application before it is
|
663
|
+
viewable or usable by a user. Expected uses for the "application"
|
664
|
+
media type include file transfer, spreadsheets, data for mail-based
|
665
|
+
scheduling systems, and languages for "active" (computational)
|
666
|
+
material. (The latter, in particular, can pose security problems
|
667
|
+
which must be understood by implementors, and are considered in
|
668
|
+
detail in the discussion of the "application/PostScript" media type.)
|
669
|
+
|
670
|
+
|
671
|
+
|
672
|
+
|
673
|
+
Freed & Borenstein Standards Track [Page 12]
|
674
|
+
|
675
|
+
RFC 2046 Media Types November 1996
|
676
|
+
|
677
|
+
|
678
|
+
For example, a meeting scheduler might define a standard
|
679
|
+
representation for information about proposed meeting dates. An
|
680
|
+
intelligent user agent would use this information to conduct a dialog
|
681
|
+
with the user, and might then send additional material based on that
|
682
|
+
dialog. More generally, there have been several "active" messaging
|
683
|
+
languages developed in which programs in a suitably specialized
|
684
|
+
language are transported to a remote location and automatically run
|
685
|
+
in the recipient's environment.
|
686
|
+
|
687
|
+
Such applications may be defined as subtypes of the "application"
|
688
|
+
media type. This document defines two subtypes:
|
689
|
+
|
690
|
+
octet-stream, and PostScript.
|
691
|
+
|
692
|
+
The subtype of "application" will often be either the name or include
|
693
|
+
part of the name of the application for which the data are intended.
|
694
|
+
This does not mean, however, that any application program name may be
|
695
|
+
used freely as a subtype of "application".
|
696
|
+
|
697
|
+
4.5.1. Octet-Stream Subtype
|
698
|
+
|
699
|
+
The "octet-stream" subtype is used to indicate that a body contains
|
700
|
+
arbitrary binary data. The set of currently defined parameters is:
|
701
|
+
|
702
|
+
(1) TYPE -- the general type or category of binary data.
|
703
|
+
This is intended as information for the human recipient
|
704
|
+
rather than for any automatic processing.
|
705
|
+
|
706
|
+
(2) PADDING -- the number of bits of padding that were
|
707
|
+
appended to the bit-stream comprising the actual
|
708
|
+
contents to produce the enclosed 8bit byte-oriented
|
709
|
+
data. This is useful for enclosing a bit-stream in a
|
710
|
+
body when the total number of bits is not a multiple of
|
711
|
+
8.
|
712
|
+
|
713
|
+
Both of these parameters are optional.
|
714
|
+
|
715
|
+
An additional parameter, "CONVERSIONS", was defined in RFC 1341 but
|
716
|
+
has since been removed. RFC 1341 also defined the use of a "NAME"
|
717
|
+
parameter which gave a suggested file name to be used if the data
|
718
|
+
were to be written to a file. This has been deprecated in
|
719
|
+
anticipation of a separate Content-Disposition header field, to be
|
720
|
+
defined in a subsequent RFC.
|
721
|
+
|
722
|
+
The recommended action for an implementation that receives an
|
723
|
+
"application/octet-stream" entity is to simply offer to put the data
|
724
|
+
in a file, with any Content-Transfer-Encoding undone, or perhaps to
|
725
|
+
use it as input to a user-specified process.
|
726
|
+
|
727
|
+
|
728
|
+
|
729
|
+
Freed & Borenstein Standards Track [Page 13]
|
730
|
+
|
731
|
+
RFC 2046 Media Types November 1996
|
732
|
+
|
733
|
+
|
734
|
+
To reduce the danger of transmitting rogue programs, it is strongly
|
735
|
+
recommended that implementations NOT implement a path-search
|
736
|
+
mechanism whereby an arbitrary program named in the Content-Type
|
737
|
+
parameter (e.g., an "interpreter=" parameter) is found and executed
|
738
|
+
using the message body as input.
|
739
|
+
|
740
|
+
4.5.2. PostScript Subtype
|
741
|
+
|
742
|
+
A media type of "application/postscript" indicates a PostScript
|
743
|
+
program. Currently two variants of the PostScript language are
|
744
|
+
allowed; the original level 1 variant is described in [POSTSCRIPT]
|
745
|
+
and the more recent level 2 variant is described in [POSTSCRIPT2].
|
746
|
+
|
747
|
+
PostScript is a registered trademark of Adobe Systems, Inc. Use of
|
748
|
+
the MIME media type "application/postscript" implies recognition of
|
749
|
+
that trademark and all the rights it entails.
|
750
|
+
|
751
|
+
The PostScript language definition provides facilities for internal
|
752
|
+
labelling of the specific language features a given program uses.
|
753
|
+
This labelling, called the PostScript document structuring
|
754
|
+
conventions, or DSC, is very general and provides substantially more
|
755
|
+
information than just the language level. The use of document
|
756
|
+
structuring conventions, while not required, is strongly recommended
|
757
|
+
as an aid to interoperability. Documents which lack proper
|
758
|
+
structuring conventions cannot be tested to see whether or not they
|
759
|
+
will work in a given environment. As such, some systems may assume
|
760
|
+
the worst and refuse to process unstructured documents.
|
761
|
+
|
762
|
+
The execution of general-purpose PostScript interpreters entails
|
763
|
+
serious security risks, and implementors are discouraged from simply
|
764
|
+
sending PostScript bodies to "off- the-shelf" interpreters. While it
|
765
|
+
is usually safe to send PostScript to a printer, where the potential
|
766
|
+
for harm is greatly constrained by typical printer environments,
|
767
|
+
implementors should consider all of the following before they add
|
768
|
+
interactive display of PostScript bodies to their MIME readers.
|
769
|
+
|
770
|
+
The remainder of this section outlines some, though probably not all,
|
771
|
+
of the possible problems with the transport of PostScript entities.
|
772
|
+
|
773
|
+
(1) Dangerous operations in the PostScript language
|
774
|
+
include, but may not be limited to, the PostScript
|
775
|
+
operators "deletefile", "renamefile", "filenameforall",
|
776
|
+
and "file". "File" is only dangerous when applied to
|
777
|
+
something other than standard input or output.
|
778
|
+
Implementations may also define additional nonstandard
|
779
|
+
file operators; these may also pose a threat to
|
780
|
+
security. "Filenameforall", the wildcard file search
|
781
|
+
operator, may appear at first glance to be harmless.
|
782
|
+
|
783
|
+
|
784
|
+
|
785
|
+
Freed & Borenstein Standards Track [Page 14]
|
786
|
+
|
787
|
+
RFC 2046 Media Types November 1996
|
788
|
+
|
789
|
+
|
790
|
+
Note, however, that this operator has the potential to
|
791
|
+
reveal information about what files the recipient has
|
792
|
+
access to, and this information may itself be
|
793
|
+
sensitive. Message senders should avoid the use of
|
794
|
+
potentially dangerous file operators, since these
|
795
|
+
operators are quite likely to be unavailable in secure
|
796
|
+
PostScript implementations. Message receiving and
|
797
|
+
displaying software should either completely disable
|
798
|
+
all potentially dangerous file operators or take
|
799
|
+
special care not to delegate any special authority to
|
800
|
+
their operation. These operators should be viewed as
|
801
|
+
being done by an outside agency when interpreting
|
802
|
+
PostScript documents. Such disabling and/or checking
|
803
|
+
should be done completely outside of the reach of the
|
804
|
+
PostScript language itself; care should be taken to
|
805
|
+
insure that no method exists for re-enabling full-
|
806
|
+
function versions of these operators.
|
807
|
+
|
808
|
+
(2) The PostScript language provides facilities for exiting
|
809
|
+
the normal interpreter, or server, loop. Changes made
|
810
|
+
in this "outer" environment are customarily retained
|
811
|
+
across documents, and may in some cases be retained
|
812
|
+
semipermanently in nonvolatile memory. The operators
|
813
|
+
associated with exiting the interpreter loop have the
|
814
|
+
potential to interfere with subsequent document
|
815
|
+
processing. As such, their unrestrained use
|
816
|
+
constitutes a threat of service denial. PostScript
|
817
|
+
operators that exit the interpreter loop include, but
|
818
|
+
may not be limited to, the exitserver and startjob
|
819
|
+
operators. Message sending software should not
|
820
|
+
generate PostScript that depends on exiting the
|
821
|
+
interpreter loop to operate, since the ability to exit
|
822
|
+
will probably be unavailable in secure PostScript
|
823
|
+
implementations. Message receiving and displaying
|
824
|
+
software should completely disable the ability to make
|
825
|
+
retained changes to the PostScript environment by
|
826
|
+
eliminating or disabling the "startjob" and
|
827
|
+
"exitserver" operations. If these operations cannot be
|
828
|
+
eliminated or completely disabled the password
|
829
|
+
associated with them should at least be set to a hard-
|
830
|
+
to-guess value.
|
831
|
+
|
832
|
+
(3) PostScript provides operators for setting system-wide
|
833
|
+
and device-specific parameters. These parameter
|
834
|
+
settings may be retained across jobs and may
|
835
|
+
potentially pose a threat to the correct operation of
|
836
|
+
the interpreter. The PostScript operators that set
|
837
|
+
system and device parameters include, but may not be
|
838
|
+
|
839
|
+
|
840
|
+
|
841
|
+
Freed & Borenstein Standards Track [Page 15]
|
842
|
+
|
843
|
+
RFC 2046 Media Types November 1996
|
844
|
+
|
845
|
+
|
846
|
+
limited to, the "setsystemparams" and "setdevparams"
|
847
|
+
operators. Message sending software should not
|
848
|
+
generate PostScript that depends on the setting of
|
849
|
+
system or device parameters to operate correctly. The
|
850
|
+
ability to set these parameters will probably be
|
851
|
+
unavailable in secure PostScript implementations.
|
852
|
+
Message receiving and displaying software should
|
853
|
+
disable the ability to change system and device
|
854
|
+
parameters. If these operators cannot be completely
|
855
|
+
disabled the password associated with them should at
|
856
|
+
least be set to a hard-to-guess value.
|
857
|
+
|
858
|
+
(4) Some PostScript implementations provide nonstandard
|
859
|
+
facilities for the direct loading and execution of
|
860
|
+
machine code. Such facilities are quite obviously open
|
861
|
+
to substantial abuse. Message sending software should
|
862
|
+
not make use of such features. Besides being totally
|
863
|
+
hardware-specific, they are also likely to be
|
864
|
+
unavailable in secure implementations of PostScript.
|
865
|
+
Message receiving and displaying software should not
|
866
|
+
allow such operators to be used if they exist.
|
867
|
+
|
868
|
+
(5) PostScript is an extensible language, and many, if not
|
869
|
+
most, implementations of it provide a number of their
|
870
|
+
own extensions. This document does not deal with such
|
871
|
+
extensions explicitly since they constitute an unknown
|
872
|
+
factor. Message sending software should not make use
|
873
|
+
of nonstandard extensions; they are likely to be
|
874
|
+
missing from some implementations. Message receiving
|
875
|
+
and displaying software should make sure that any
|
876
|
+
nonstandard PostScript operators are secure and don't
|
877
|
+
present any kind of threat.
|
878
|
+
|
879
|
+
(6) It is possible to write PostScript that consumes huge
|
880
|
+
amounts of various system resources. It is also
|
881
|
+
possible to write PostScript programs that loop
|
882
|
+
indefinitely. Both types of programs have the
|
883
|
+
potential to cause damage if sent to unsuspecting
|
884
|
+
recipients. Message-sending software should avoid the
|
885
|
+
construction and dissemination of such programs, which
|
886
|
+
is antisocial. Message receiving and displaying
|
887
|
+
software should provide appropriate mechanisms to abort
|
888
|
+
processing after a reasonable amount of time has
|
889
|
+
elapsed. In addition, PostScript interpreters should be
|
890
|
+
limited to the consumption of only a reasonable amount
|
891
|
+
of any given system resource.
|
892
|
+
|
893
|
+
|
894
|
+
|
895
|
+
|
896
|
+
|
897
|
+
Freed & Borenstein Standards Track [Page 16]
|
898
|
+
|
899
|
+
RFC 2046 Media Types November 1996
|
900
|
+
|
901
|
+
|
902
|
+
(7) It is possible to include raw binary information inside
|
903
|
+
PostScript in various forms. This is not recommended
|
904
|
+
for use in Internet mail, both because it is not
|
905
|
+
supported by all PostScript interpreters and because it
|
906
|
+
significantly complicates the use of a MIME Content-
|
907
|
+
Transfer-Encoding. (Without such binary, PostScript
|
908
|
+
may typically be viewed as line-oriented data. The
|
909
|
+
treatment of CRLF sequences becomes extremely
|
910
|
+
problematic if binary and line-oriented data are mixed
|
911
|
+
in a single Postscript data stream.)
|
912
|
+
|
913
|
+
(8) Finally, bugs may exist in some PostScript interpreters
|
914
|
+
which could possibly be exploited to gain unauthorized
|
915
|
+
access to a recipient's system. Apart from noting this
|
916
|
+
possibility, there is no specific action to take to
|
917
|
+
prevent this, apart from the timely correction of such
|
918
|
+
bugs if any are found.
|
919
|
+
|
920
|
+
4.5.3. Other Application Subtypes
|
921
|
+
|
922
|
+
It is expected that many other subtypes of "application" will be
|
923
|
+
defined in the future. MIME implementations must at a minimum treat
|
924
|
+
any unrecognized subtypes as being equivalent to "application/octet-
|
925
|
+
stream".
|
926
|
+
|
927
|
+
5. Composite Media Type Values
|
928
|
+
|
929
|
+
The remaining two of the seven initial Content-Type values refer to
|
930
|
+
composite entities. Composite entities are handled using MIME
|
931
|
+
mechanisms -- a MIME processor typically handles the body directly.
|
932
|
+
|
933
|
+
5.1. Multipart Media Type
|
934
|
+
|
935
|
+
In the case of multipart entities, in which one or more different
|
936
|
+
sets of data are combined in a single body, a "multipart" media type
|
937
|
+
field must appear in the entity's header. The body must then contain
|
938
|
+
one or more body parts, each preceded by a boundary delimiter line,
|
939
|
+
and the last one followed by a closing boundary delimiter line.
|
940
|
+
After its boundary delimiter line, each body part then consists of a
|
941
|
+
header area, a blank line, and a body area. Thus a body part is
|
942
|
+
similar to an RFC 822 message in syntax, but different in meaning.
|
943
|
+
|
944
|
+
A body part is an entity and hence is NOT to be interpreted as
|
945
|
+
actually being an RFC 822 message. To begin with, NO header fields
|
946
|
+
are actually required in body parts. A body part that starts with a
|
947
|
+
blank line, therefore, is allowed and is a body part for which all
|
948
|
+
default values are to be assumed. In such a case, the absence of a
|
949
|
+
Content-Type header usually indicates that the corresponding body has
|
950
|
+
|
951
|
+
|
952
|
+
|
953
|
+
Freed & Borenstein Standards Track [Page 17]
|
954
|
+
|
955
|
+
RFC 2046 Media Types November 1996
|
956
|
+
|
957
|
+
|
958
|
+
a content-type of "text/plain; charset=US-ASCII".
|
959
|
+
|
960
|
+
The only header fields that have defined meaning for body parts are
|
961
|
+
those the names of which begin with "Content-". All other header
|
962
|
+
fields may be ignored in body parts. Although they should generally
|
963
|
+
be retained if at all possible, they may be discarded by gateways if
|
964
|
+
necessary. Such other fields are permitted to appear in body parts
|
965
|
+
but must not be depended on. "X-" fields may be created for
|
966
|
+
experimental or private purposes, with the recognition that the
|
967
|
+
information they contain may be lost at some gateways.
|
968
|
+
|
969
|
+
NOTE: The distinction between an RFC 822 message and a body part is
|
970
|
+
subtle, but important. A gateway between Internet and X.400 mail,
|
971
|
+
for example, must be able to tell the difference between a body part
|
972
|
+
that contains an image and a body part that contains an encapsulated
|
973
|
+
message, the body of which is a JPEG image. In order to represent
|
974
|
+
the latter, the body part must have "Content-Type: message/rfc822",
|
975
|
+
and its body (after the blank line) must be the encapsulated message,
|
976
|
+
with its own "Content-Type: image/jpeg" header field. The use of
|
977
|
+
similar syntax facilitates the conversion of messages to body parts,
|
978
|
+
and vice versa, but the distinction between the two must be
|
979
|
+
understood by implementors. (For the special case in which parts
|
980
|
+
actually are messages, a "digest" subtype is also defined.)
|
981
|
+
|
982
|
+
As stated previously, each body part is preceded by a boundary
|
983
|
+
delimiter line that contains the boundary delimiter. The boundary
|
984
|
+
delimiter MUST NOT appear inside any of the encapsulated parts, on a
|
985
|
+
line by itself or as the prefix of any line. This implies that it is
|
986
|
+
crucial that the composing agent be able to choose and specify a
|
987
|
+
unique boundary parameter value that does not contain the boundary
|
988
|
+
parameter value of an enclosing multipart as a prefix.
|
989
|
+
|
990
|
+
All present and future subtypes of the "multipart" type must use an
|
991
|
+
identical syntax. Subtypes may differ in their semantics, and may
|
992
|
+
impose additional restrictions on syntax, but must conform to the
|
993
|
+
required syntax for the "multipart" type. This requirement ensures
|
994
|
+
that all conformant user agents will at least be able to recognize
|
995
|
+
and separate the parts of any multipart entity, even those of an
|
996
|
+
unrecognized subtype.
|
997
|
+
|
998
|
+
As stated in the definition of the Content-Transfer-Encoding field
|
999
|
+
[RFC 2045], no encoding other than "7bit", "8bit", or "binary" is
|
1000
|
+
permitted for entities of type "multipart". The "multipart" boundary
|
1001
|
+
delimiters and header fields are always represented as 7bit US-ASCII
|
1002
|
+
in any case (though the header fields may encode non-US-ASCII header
|
1003
|
+
text as per RFC 2047) and data within the body parts can be encoded
|
1004
|
+
on a part-by-part basis, with Content-Transfer-Encoding fields for
|
1005
|
+
each appropriate body part.
|
1006
|
+
|
1007
|
+
|
1008
|
+
|
1009
|
+
Freed & Borenstein Standards Track [Page 18]
|
1010
|
+
|
1011
|
+
RFC 2046 Media Types November 1996
|
1012
|
+
|
1013
|
+
|
1014
|
+
5.1.1. Common Syntax
|
1015
|
+
|
1016
|
+
This section defines a common syntax for subtypes of "multipart".
|
1017
|
+
All subtypes of "multipart" must use this syntax. A simple example
|
1018
|
+
of a multipart message also appears in this section. An example of a
|
1019
|
+
more complex multipart message is given in RFC 2049.
|
1020
|
+
|
1021
|
+
The Content-Type field for multipart entities requires one parameter,
|
1022
|
+
"boundary". The boundary delimiter line is then defined as a line
|
1023
|
+
consisting entirely of two hyphen characters ("-", decimal value 45)
|
1024
|
+
followed by the boundary parameter value from the Content-Type header
|
1025
|
+
field, optional linear whitespace, and a terminating CRLF.
|
1026
|
+
|
1027
|
+
NOTE: The hyphens are for rough compatibility with the earlier RFC
|
1028
|
+
934 method of message encapsulation, and for ease of searching for
|
1029
|
+
the boundaries in some implementations. However, it should be noted
|
1030
|
+
that multipart messages are NOT completely compatible with RFC 934
|
1031
|
+
encapsulations; in particular, they do not obey RFC 934 quoting
|
1032
|
+
conventions for embedded lines that begin with hyphens. This
|
1033
|
+
mechanism was chosen over the RFC 934 mechanism because the latter
|
1034
|
+
causes lines to grow with each level of quoting. The combination of
|
1035
|
+
this growth with the fact that SMTP implementations sometimes wrap
|
1036
|
+
long lines made the RFC 934 mechanism unsuitable for use in the event
|
1037
|
+
that deeply-nested multipart structuring is ever desired.
|
1038
|
+
|
1039
|
+
WARNING TO IMPLEMENTORS: The grammar for parameters on the Content-
|
1040
|
+
type field is such that it is often necessary to enclose the boundary
|
1041
|
+
parameter values in quotes on the Content-type line. This is not
|
1042
|
+
always necessary, but never hurts. Implementors should be sure to
|
1043
|
+
study the grammar carefully in order to avoid producing invalid
|
1044
|
+
Content-type fields. Thus, a typical "multipart" Content-Type header
|
1045
|
+
field might look like this:
|
1046
|
+
|
1047
|
+
Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08j34c0p
|
1048
|
+
|
1049
|
+
But the following is not valid:
|
1050
|
+
|
1051
|
+
Content-Type: multipart/mixed; boundary=gc0pJq0M:08jU534c0p
|
1052
|
+
|
1053
|
+
(because of the colon) and must instead be represented as
|
1054
|
+
|
1055
|
+
Content-Type: multipart/mixed; boundary="gc0pJq0M:08jU534c0p"
|
1056
|
+
|
1057
|
+
This Content-Type value indicates that the content consists of one or
|
1058
|
+
more parts, each with a structure that is syntactically identical to
|
1059
|
+
an RFC 822 message, except that the header area is allowed to be
|
1060
|
+
completely empty, and that the parts are each preceded by the line
|
1061
|
+
|
1062
|
+
|
1063
|
+
|
1064
|
+
|
1065
|
+
Freed & Borenstein Standards Track [Page 19]
|
1066
|
+
|
1067
|
+
RFC 2046 Media Types November 1996
|
1068
|
+
|
1069
|
+
|
1070
|
+
--gc0pJq0M:08jU534c0p
|
1071
|
+
|
1072
|
+
The boundary delimiter MUST occur at the beginning of a line, i.e.,
|
1073
|
+
following a CRLF, and the initial CRLF is considered to be attached
|
1074
|
+
to the boundary delimiter line rather than part of the preceding
|
1075
|
+
part. The boundary may be followed by zero or more characters of
|
1076
|
+
linear whitespace. It is then terminated by either another CRLF and
|
1077
|
+
the header fields for the next part, or by two CRLFs, in which case
|
1078
|
+
there are no header fields for the next part. If no Content-Type
|
1079
|
+
field is present it is assumed to be "message/rfc822" in a
|
1080
|
+
"multipart/digest" and "text/plain" otherwise.
|
1081
|
+
|
1082
|
+
NOTE: The CRLF preceding the boundary delimiter line is conceptually
|
1083
|
+
attached to the boundary so that it is possible to have a part that
|
1084
|
+
does not end with a CRLF (line break). Body parts that must be
|
1085
|
+
considered to end with line breaks, therefore, must have two CRLFs
|
1086
|
+
preceding the boundary delimiter line, the first of which is part of
|
1087
|
+
the preceding body part, and the second of which is part of the
|
1088
|
+
encapsulation boundary.
|
1089
|
+
|
1090
|
+
Boundary delimiters must not appear within the encapsulated material,
|
1091
|
+
and must be no longer than 70 characters, not counting the two
|
1092
|
+
leading hyphens.
|
1093
|
+
|
1094
|
+
The boundary delimiter line following the last body part is a
|
1095
|
+
distinguished delimiter that indicates that no further body parts
|
1096
|
+
will follow. Such a delimiter line is identical to the previous
|
1097
|
+
delimiter lines, with the addition of two more hyphens after the
|
1098
|
+
boundary parameter value.
|
1099
|
+
|
1100
|
+
--gc0pJq0M:08jU534c0p--
|
1101
|
+
|
1102
|
+
NOTE TO IMPLEMENTORS: Boundary string comparisons must compare the
|
1103
|
+
boundary value with the beginning of each candidate line. An exact
|
1104
|
+
match of the entire candidate line is not required; it is sufficient
|
1105
|
+
that the boundary appear in its entirety following the CRLF.
|
1106
|
+
|
1107
|
+
There appears to be room for additional information prior to the
|
1108
|
+
first boundary delimiter line and following the final boundary
|
1109
|
+
delimiter line. These areas should generally be left blank, and
|
1110
|
+
implementations must ignore anything that appears before the first
|
1111
|
+
boundary delimiter line or after the last one.
|
1112
|
+
|
1113
|
+
NOTE: These "preamble" and "epilogue" areas are generally not used
|
1114
|
+
because of the lack of proper typing of these parts and the lack of
|
1115
|
+
clear semantics for handling these areas at gateways, particularly
|
1116
|
+
X.400 gateways. However, rather than leaving the preamble area
|
1117
|
+
blank, many MIME implementations have found this to be a convenient
|
1118
|
+
|
1119
|
+
|
1120
|
+
|
1121
|
+
Freed & Borenstein Standards Track [Page 20]
|
1122
|
+
|
1123
|
+
RFC 2046 Media Types November 1996
|
1124
|
+
|
1125
|
+
|
1126
|
+
place to insert an explanatory note for recipients who read the
|
1127
|
+
message with pre-MIME software, since such notes will be ignored by
|
1128
|
+
MIME-compliant software.
|
1129
|
+
|
1130
|
+
NOTE: Because boundary delimiters must not appear in the body parts
|
1131
|
+
being encapsulated, a user agent must exercise care to choose a
|
1132
|
+
unique boundary parameter value. The boundary parameter value in the
|
1133
|
+
example above could have been the result of an algorithm designed to
|
1134
|
+
produce boundary delimiters with a very low probability of already
|
1135
|
+
existing in the data to be encapsulated without having to prescan the
|
1136
|
+
data. Alternate algorithms might result in more "readable" boundary
|
1137
|
+
delimiters for a recipient with an old user agent, but would require
|
1138
|
+
more attention to the possibility that the boundary delimiter might
|
1139
|
+
appear at the beginning of some line in the encapsulated part. The
|
1140
|
+
simplest boundary delimiter line possible is something like "---",
|
1141
|
+
with a closing boundary delimiter line of "-----".
|
1142
|
+
|
1143
|
+
As a very simple example, the following multipart message has two
|
1144
|
+
parts, both of them plain text, one of them explicitly typed and one
|
1145
|
+
of them implicitly typed:
|
1146
|
+
|
1147
|
+
From: Nathaniel Borenstein <nsb@bellcore.com>
|
1148
|
+
To: Ned Freed <ned@innosoft.com>
|
1149
|
+
Date: Sun, 21 Mar 1993 23:56:48 -0800 (PST)
|
1150
|
+
Subject: Sample message
|
1151
|
+
MIME-Version: 1.0
|
1152
|
+
Content-type: multipart/mixed; boundary="simple boundary"
|
1153
|
+
|
1154
|
+
This is the preamble. It is to be ignored, though it
|
1155
|
+
is a handy place for composition agents to include an
|
1156
|
+
explanatory note to non-MIME conformant readers.
|
1157
|
+
|
1158
|
+
--simple boundary
|
1159
|
+
|
1160
|
+
This is implicitly typed plain US-ASCII text.
|
1161
|
+
It does NOT end with a linebreak.
|
1162
|
+
--simple boundary
|
1163
|
+
Content-type: text/plain; charset=us-ascii
|
1164
|
+
|
1165
|
+
This is explicitly typed plain US-ASCII text.
|
1166
|
+
It DOES end with a linebreak.
|
1167
|
+
|
1168
|
+
--simple boundary--
|
1169
|
+
|
1170
|
+
This is the epilogue. It is also to be ignored.
|
1171
|
+
|
1172
|
+
|
1173
|
+
|
1174
|
+
|
1175
|
+
|
1176
|
+
|
1177
|
+
Freed & Borenstein Standards Track [Page 21]
|
1178
|
+
|
1179
|
+
RFC 2046 Media Types November 1996
|
1180
|
+
|
1181
|
+
|
1182
|
+
The use of a media type of "multipart" in a body part within another
|
1183
|
+
"multipart" entity is explicitly allowed. In such cases, for obvious
|
1184
|
+
reasons, care must be taken to ensure that each nested "multipart"
|
1185
|
+
entity uses a different boundary delimiter. See RFC 2049 for an
|
1186
|
+
example of nested "multipart" entities.
|
1187
|
+
|
1188
|
+
The use of the "multipart" media type with only a single body part
|
1189
|
+
may be useful in certain contexts, and is explicitly permitted.
|
1190
|
+
|
1191
|
+
NOTE: Experience has shown that a "multipart" media type with a
|
1192
|
+
single body part is useful for sending non-text media types. It has
|
1193
|
+
the advantage of providing the preamble as a place to include
|
1194
|
+
decoding instructions. In addition, a number of SMTP gateways move
|
1195
|
+
or remove the MIME headers, and a clever MIME decoder can take a good
|
1196
|
+
guess at multipart boundaries even in the absence of the Content-Type
|
1197
|
+
header and thereby successfully decode the message.
|
1198
|
+
|
1199
|
+
The only mandatory global parameter for the "multipart" media type is
|
1200
|
+
the boundary parameter, which consists of 1 to 70 characters from a
|
1201
|
+
set of characters known to be very robust through mail gateways, and
|
1202
|
+
NOT ending with white space. (If a boundary delimiter line appears to
|
1203
|
+
end with white space, the white space must be presumed to have been
|
1204
|
+
added by a gateway, and must be deleted.) It is formally specified
|
1205
|
+
by the following BNF:
|
1206
|
+
|
1207
|
+
boundary := 0*69<bchars> bcharsnospace
|
1208
|
+
|
1209
|
+
bchars := bcharsnospace / " "
|
1210
|
+
|
1211
|
+
bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
|
1212
|
+
"+" / "_" / "," / "-" / "." /
|
1213
|
+
"/" / ":" / "=" / "?"
|
1214
|
+
|
1215
|
+
Overall, the body of a "multipart" entity may be specified as
|
1216
|
+
follows:
|
1217
|
+
|
1218
|
+
dash-boundary := "--" boundary
|
1219
|
+
; boundary taken from the value of
|
1220
|
+
; boundary parameter of the
|
1221
|
+
; Content-Type field.
|
1222
|
+
|
1223
|
+
multipart-body := [preamble CRLF]
|
1224
|
+
dash-boundary transport-padding CRLF
|
1225
|
+
body-part *encapsulation
|
1226
|
+
close-delimiter transport-padding
|
1227
|
+
[CRLF epilogue]
|
1228
|
+
|
1229
|
+
|
1230
|
+
|
1231
|
+
|
1232
|
+
|
1233
|
+
Freed & Borenstein Standards Track [Page 22]
|
1234
|
+
|
1235
|
+
RFC 2046 Media Types November 1996
|
1236
|
+
|
1237
|
+
|
1238
|
+
transport-padding := *LWSP-char
|
1239
|
+
; Composers MUST NOT generate
|
1240
|
+
; non-zero length transport
|
1241
|
+
; padding, but receivers MUST
|
1242
|
+
; be able to handle padding
|
1243
|
+
; added by message transports.
|
1244
|
+
|
1245
|
+
encapsulation := delimiter transport-padding
|
1246
|
+
CRLF body-part
|
1247
|
+
|
1248
|
+
delimiter := CRLF dash-boundary
|
1249
|
+
|
1250
|
+
close-delimiter := delimiter "--"
|
1251
|
+
|
1252
|
+
preamble := discard-text
|
1253
|
+
|
1254
|
+
epilogue := discard-text
|
1255
|
+
|
1256
|
+
discard-text := *(*text CRLF) *text
|
1257
|
+
; May be ignored or discarded.
|
1258
|
+
|
1259
|
+
body-part := MIME-part-headers [CRLF *OCTET]
|
1260
|
+
; Lines in a body-part must not start
|
1261
|
+
; with the specified dash-boundary and
|
1262
|
+
; the delimiter must not appear anywhere
|
1263
|
+
; in the body part. Note that the
|
1264
|
+
; semantics of a body-part differ from
|
1265
|
+
; the semantics of a message, as
|
1266
|
+
; described in the text.
|
1267
|
+
|
1268
|
+
OCTET := <any 0-255 octet value>
|
1269
|
+
|
1270
|
+
IMPORTANT: The free insertion of linear-white-space and RFC 822
|
1271
|
+
comments between the elements shown in this BNF is NOT allowed since
|
1272
|
+
this BNF does not specify a structured header field.
|
1273
|
+
|
1274
|
+
NOTE: In certain transport enclaves, RFC 822 restrictions such as
|
1275
|
+
the one that limits bodies to printable US-ASCII characters may not
|
1276
|
+
be in force. (That is, the transport domains may exist that resemble
|
1277
|
+
standard Internet mail transport as specified in RFC 821 and assumed
|
1278
|
+
by RFC 822, but without certain restrictions.) The relaxation of
|
1279
|
+
these restrictions should be construed as locally extending the
|
1280
|
+
definition of bodies, for example to include octets outside of the
|
1281
|
+
US-ASCII range, as long as these extensions are supported by the
|
1282
|
+
transport and adequately documented in the Content- Transfer-Encoding
|
1283
|
+
header field. However, in no event are headers (either message
|
1284
|
+
headers or body part headers) allowed to contain anything other than
|
1285
|
+
US-ASCII characters.
|
1286
|
+
|
1287
|
+
|
1288
|
+
|
1289
|
+
Freed & Borenstein Standards Track [Page 23]
|
1290
|
+
|
1291
|
+
RFC 2046 Media Types November 1996
|
1292
|
+
|
1293
|
+
|
1294
|
+
NOTE: Conspicuously missing from the "multipart" type is a notion of
|
1295
|
+
structured, related body parts. It is recommended that those wishing
|
1296
|
+
to provide more structured or integrated multipart messaging
|
1297
|
+
facilities should define subtypes of multipart that are syntactically
|
1298
|
+
identical but define relationships between the various parts. For
|
1299
|
+
example, subtypes of multipart could be defined that include a
|
1300
|
+
distinguished part which in turn is used to specify the relationships
|
1301
|
+
between the other parts, probably referring to them by their
|
1302
|
+
Content-ID field. Old implementations will not recognize the new
|
1303
|
+
subtype if this approach is used, but will treat it as
|
1304
|
+
multipart/mixed and will thus be able to show the user the parts that
|
1305
|
+
are recognized.
|
1306
|
+
|
1307
|
+
5.1.2. Handling Nested Messages and Multiparts
|
1308
|
+
|
1309
|
+
The "message/rfc822" subtype defined in a subsequent section of this
|
1310
|
+
document has no terminating condition other than running out of data.
|
1311
|
+
Similarly, an improperly truncated "multipart" entity may not have
|
1312
|
+
any terminating boundary marker, and can turn up operationally due to
|
1313
|
+
mail system malfunctions.
|
1314
|
+
|
1315
|
+
It is essential that such entities be handled correctly when they are
|
1316
|
+
themselves imbedded inside of another "multipart" structure. MIME
|
1317
|
+
implementations are therefore required to recognize outer level
|
1318
|
+
boundary markers at ANY level of inner nesting. It is not sufficient
|
1319
|
+
to only check for the next expected marker or other terminating
|
1320
|
+
condition.
|
1321
|
+
|
1322
|
+
5.1.3. Mixed Subtype
|
1323
|
+
|
1324
|
+
The "mixed" subtype of "multipart" is intended for use when the body
|
1325
|
+
parts are independent and need to be bundled in a particular order.
|
1326
|
+
Any "multipart" subtypes that an implementation does not recognize
|
1327
|
+
must be treated as being of subtype "mixed".
|
1328
|
+
|
1329
|
+
5.1.4. Alternative Subtype
|
1330
|
+
|
1331
|
+
The "multipart/alternative" type is syntactically identical to
|
1332
|
+
"multipart/mixed", but the semantics are different. In particular,
|
1333
|
+
each of the body parts is an "alternative" version of the same
|
1334
|
+
information.
|
1335
|
+
|
1336
|
+
Systems should recognize that the content of the various parts are
|
1337
|
+
interchangeable. Systems should choose the "best" type based on the
|
1338
|
+
local environment and references, in some cases even through user
|
1339
|
+
interaction. As with "multipart/mixed", the order of body parts is
|
1340
|
+
significant. In this case, the alternatives appear in an order of
|
1341
|
+
increasing faithfulness to the original content. In general, the
|
1342
|
+
|
1343
|
+
|
1344
|
+
|
1345
|
+
Freed & Borenstein Standards Track [Page 24]
|
1346
|
+
|
1347
|
+
RFC 2046 Media Types November 1996
|
1348
|
+
|
1349
|
+
|
1350
|
+
best choice is the LAST part of a type supported by the recipient
|
1351
|
+
system's local environment.
|
1352
|
+
|
1353
|
+
"Multipart/alternative" may be used, for example, to send a message
|
1354
|
+
in a fancy text format in such a way that it can easily be displayed
|
1355
|
+
anywhere:
|
1356
|
+
|
1357
|
+
From: Nathaniel Borenstein <nsb@bellcore.com>
|
1358
|
+
To: Ned Freed <ned@innosoft.com>
|
1359
|
+
Date: Mon, 22 Mar 1993 09:41:09 -0800 (PST)
|
1360
|
+
Subject: Formatted text mail
|
1361
|
+
MIME-Version: 1.0
|
1362
|
+
Content-Type: multipart/alternative; boundary=boundary42
|
1363
|
+
|
1364
|
+
--boundary42
|
1365
|
+
Content-Type: text/plain; charset=us-ascii
|
1366
|
+
|
1367
|
+
... plain text version of message goes here ...
|
1368
|
+
|
1369
|
+
--boundary42
|
1370
|
+
Content-Type: text/enriched
|
1371
|
+
|
1372
|
+
... RFC 1896 text/enriched version of same message
|
1373
|
+
goes here ...
|
1374
|
+
|
1375
|
+
--boundary42
|
1376
|
+
Content-Type: application/x-whatever
|
1377
|
+
|
1378
|
+
... fanciest version of same message goes here ...
|
1379
|
+
|
1380
|
+
--boundary42--
|
1381
|
+
|
1382
|
+
In this example, users whose mail systems understood the
|
1383
|
+
"application/x-whatever" format would see only the fancy version,
|
1384
|
+
while other users would see only the enriched or plain text version,
|
1385
|
+
depending on the capabilities of their system.
|
1386
|
+
|
1387
|
+
In general, user agents that compose "multipart/alternative" entities
|
1388
|
+
must place the body parts in increasing order of preference, that is,
|
1389
|
+
with the preferred format last. For fancy text, the sending user
|
1390
|
+
agent should put the plainest format first and the richest format
|
1391
|
+
last. Receiving user agents should pick and display the last format
|
1392
|
+
they are capable of displaying. In the case where one of the
|
1393
|
+
alternatives is itself of type "multipart" and contains unrecognized
|
1394
|
+
sub-parts, the user agent may choose either to show that alternative,
|
1395
|
+
an earlier alternative, or both.
|
1396
|
+
|
1397
|
+
|
1398
|
+
|
1399
|
+
|
1400
|
+
|
1401
|
+
Freed & Borenstein Standards Track [Page 25]
|
1402
|
+
|
1403
|
+
RFC 2046 Media Types November 1996
|
1404
|
+
|
1405
|
+
|
1406
|
+
NOTE: From an implementor's perspective, it might seem more sensible
|
1407
|
+
to reverse this ordering, and have the plainest alternative last.
|
1408
|
+
However, placing the plainest alternative first is the friendliest
|
1409
|
+
possible option when "multipart/alternative" entities are viewed
|
1410
|
+
using a non-MIME-conformant viewer. While this approach does impose
|
1411
|
+
some burden on conformant MIME viewers, interoperability with older
|
1412
|
+
mail readers was deemed to be more important in this case.
|
1413
|
+
|
1414
|
+
It may be the case that some user agents, if they can recognize more
|
1415
|
+
than one of the formats, will prefer to offer the user the choice of
|
1416
|
+
which format to view. This makes sense, for example, if a message
|
1417
|
+
includes both a nicely- formatted image version and an easily-edited
|
1418
|
+
text version. What is most critical, however, is that the user not
|
1419
|
+
automatically be shown multiple versions of the same data. Either
|
1420
|
+
the user should be shown the last recognized version or should be
|
1421
|
+
given the choice.
|
1422
|
+
|
1423
|
+
THE SEMANTICS OF CONTENT-ID IN MULTIPART/ALTERNATIVE: Each part of a
|
1424
|
+
"multipart/alternative" entity represents the same data, but the
|
1425
|
+
mappings between the two are not necessarily without information
|
1426
|
+
loss. For example, information is lost when translating ODA to
|
1427
|
+
PostScript or plain text. It is recommended that each part should
|
1428
|
+
have a different Content-ID value in the case where the information
|
1429
|
+
content of the two parts is not identical. And when the information
|
1430
|
+
content is identical -- for example, where several parts of type
|
1431
|
+
"message/external-body" specify alternate ways to access the
|
1432
|
+
identical data -- the same Content-ID field value should be used, to
|
1433
|
+
optimize any caching mechanisms that might be present on the
|
1434
|
+
recipient's end. However, the Content-ID values used by the parts
|
1435
|
+
should NOT be the same Content-ID value that describes the
|
1436
|
+
"multipart/alternative" as a whole, if there is any such Content-ID
|
1437
|
+
field. That is, one Content-ID value will refer to the
|
1438
|
+
"multipart/alternative" entity, while one or more other Content-ID
|
1439
|
+
values will refer to the parts inside it.
|
1440
|
+
|
1441
|
+
5.1.5. Digest Subtype
|
1442
|
+
|
1443
|
+
This document defines a "digest" subtype of the "multipart" Content-
|
1444
|
+
Type. This type is syntactically identical to "multipart/mixed", but
|
1445
|
+
the semantics are different. In particular, in a digest, the default
|
1446
|
+
Content-Type value for a body part is changed from "text/plain" to
|
1447
|
+
"message/rfc822". This is done to allow a more readable digest
|
1448
|
+
format that is largely compatible (except for the quoting convention)
|
1449
|
+
with RFC 934.
|
1450
|
+
|
1451
|
+
Note: Though it is possible to specify a Content-Type value for a
|
1452
|
+
body part in a digest which is other than "message/rfc822", such as a
|
1453
|
+
"text/plain" part containing a description of the material in the
|
1454
|
+
|
1455
|
+
|
1456
|
+
|
1457
|
+
Freed & Borenstein Standards Track [Page 26]
|
1458
|
+
|
1459
|
+
RFC 2046 Media Types November 1996
|
1460
|
+
|
1461
|
+
|
1462
|
+
digest, actually doing so is undesireble. The "multipart/digest"
|
1463
|
+
Content-Type is intended to be used to send collections of messages.
|
1464
|
+
If a "text/plain" part is needed, it should be included as a seperate
|
1465
|
+
part of a "multipart/mixed" message.
|
1466
|
+
|
1467
|
+
A digest in this format might, then, look something like this:
|
1468
|
+
|
1469
|
+
From: Moderator-Address
|
1470
|
+
To: Recipient-List
|
1471
|
+
Date: Mon, 22 Mar 1994 13:34:51 +0000
|
1472
|
+
Subject: Internet Digest, volume 42
|
1473
|
+
MIME-Version: 1.0
|
1474
|
+
Content-Type: multipart/mixed;
|
1475
|
+
boundary="---- main boundary ----"
|
1476
|
+
|
1477
|
+
------ main boundary ----
|
1478
|
+
|
1479
|
+
...Introductory text or table of contents...
|
1480
|
+
|
1481
|
+
------ main boundary ----
|
1482
|
+
Content-Type: multipart/digest;
|
1483
|
+
boundary="---- next message ----"
|
1484
|
+
|
1485
|
+
------ next message ----
|
1486
|
+
|
1487
|
+
From: someone-else
|
1488
|
+
Date: Fri, 26 Mar 1993 11:13:32 +0200
|
1489
|
+
Subject: my opinion
|
1490
|
+
|
1491
|
+
...body goes here ...
|
1492
|
+
|
1493
|
+
------ next message ----
|
1494
|
+
|
1495
|
+
From: someone-else-again
|
1496
|
+
Date: Fri, 26 Mar 1993 10:07:13 -0500
|
1497
|
+
Subject: my different opinion
|
1498
|
+
|
1499
|
+
... another body goes here ...
|
1500
|
+
|
1501
|
+
------ next message ------
|
1502
|
+
|
1503
|
+
------ main boundary ------
|
1504
|
+
|
1505
|
+
5.1.6. Parallel Subtype
|
1506
|
+
|
1507
|
+
This document defines a "parallel" subtype of the "multipart"
|
1508
|
+
Content-Type. This type is syntactically identical to
|
1509
|
+
"multipart/mixed", but the semantics are different. In particular,
|
1510
|
+
|
1511
|
+
|
1512
|
+
|
1513
|
+
Freed & Borenstein Standards Track [Page 27]
|
1514
|
+
|
1515
|
+
RFC 2046 Media Types November 1996
|
1516
|
+
|
1517
|
+
|
1518
|
+
in a parallel entity, the order of body parts is not significant.
|
1519
|
+
|
1520
|
+
A common presentation of this type is to display all of the parts
|
1521
|
+
simultaneously on hardware and software that are capable of doing so.
|
1522
|
+
However, composing agents should be aware that many mail readers will
|
1523
|
+
lack this capability and will show the parts serially in any event.
|
1524
|
+
|
1525
|
+
5.1.7. Other Multipart Subtypes
|
1526
|
+
|
1527
|
+
Other "multipart" subtypes are expected in the future. MIME
|
1528
|
+
implementations must in general treat unrecognized subtypes of
|
1529
|
+
"multipart" as being equivalent to "multipart/mixed".
|
1530
|
+
|
1531
|
+
5.2. Message Media Type
|
1532
|
+
|
1533
|
+
It is frequently desirable, in sending mail, to encapsulate another
|
1534
|
+
mail message. A special media type, "message", is defined to
|
1535
|
+
facilitate this. In particular, the "rfc822" subtype of "message" is
|
1536
|
+
used to encapsulate RFC 822 messages.
|
1537
|
+
|
1538
|
+
NOTE: It has been suggested that subtypes of "message" might be
|
1539
|
+
defined for forwarded or rejected messages. However, forwarded and
|
1540
|
+
rejected messages can be handled as multipart messages in which the
|
1541
|
+
first part contains any control or descriptive information, and a
|
1542
|
+
second part, of type "message/rfc822", is the forwarded or rejected
|
1543
|
+
message. Composing rejection and forwarding messages in this manner
|
1544
|
+
will preserve the type information on the original message and allow
|
1545
|
+
it to be correctly presented to the recipient, and hence is strongly
|
1546
|
+
encouraged.
|
1547
|
+
|
1548
|
+
Subtypes of "message" often impose restrictions on what encodings are
|
1549
|
+
allowed. These restrictions are described in conjunction with each
|
1550
|
+
specific subtype.
|
1551
|
+
|
1552
|
+
Mail gateways, relays, and other mail handling agents are commonly
|
1553
|
+
known to alter the top-level header of an RFC 822 message. In
|
1554
|
+
particular, they frequently add, remove, or reorder header fields.
|
1555
|
+
These operations are explicitly forbidden for the encapsulated
|
1556
|
+
headers embedded in the bodies of messages of type "message."
|
1557
|
+
|
1558
|
+
5.2.1. RFC822 Subtype
|
1559
|
+
|
1560
|
+
A media type of "message/rfc822" indicates that the body contains an
|
1561
|
+
encapsulated message, with the syntax of an RFC 822 message.
|
1562
|
+
However, unlike top-level RFC 822 messages, the restriction that each
|
1563
|
+
"message/rfc822" body must include a "From", "Date", and at least one
|
1564
|
+
destination header is removed and replaced with the requirement that
|
1565
|
+
at least one of "From", "Subject", or "Date" must be present.
|
1566
|
+
|
1567
|
+
|
1568
|
+
|
1569
|
+
Freed & Borenstein Standards Track [Page 28]
|
1570
|
+
|
1571
|
+
RFC 2046 Media Types November 1996
|
1572
|
+
|
1573
|
+
|
1574
|
+
It should be noted that, despite the use of the numbers "822", a
|
1575
|
+
"message/rfc822" entity isn't restricted to material in strict
|
1576
|
+
conformance to RFC822, nor are the semantics of "message/rfc822"
|
1577
|
+
objects restricted to the semantics defined in RFC822. More
|
1578
|
+
specifically, a "message/rfc822" message could well be a News article
|
1579
|
+
or a MIME message.
|
1580
|
+
|
1581
|
+
No encoding other than "7bit", "8bit", or "binary" is permitted for
|
1582
|
+
the body of a "message/rfc822" entity. The message header fields are
|
1583
|
+
always US-ASCII in any case, and data within the body can still be
|
1584
|
+
encoded, in which case the Content-Transfer-Encoding header field in
|
1585
|
+
the encapsulated message will reflect this. Non-US-ASCII text in the
|
1586
|
+
headers of an encapsulated message can be specified using the
|
1587
|
+
mechanisms described in RFC 2047.
|
1588
|
+
|
1589
|
+
5.2.2. Partial Subtype
|
1590
|
+
|
1591
|
+
The "partial" subtype is defined to allow large entities to be
|
1592
|
+
delivered as several separate pieces of mail and automatically
|
1593
|
+
reassembled by a receiving user agent. (The concept is similar to IP
|
1594
|
+
fragmentation and reassembly in the basic Internet Protocols.) This
|
1595
|
+
mechanism can be used when intermediate transport agents limit the
|
1596
|
+
size of individual messages that can be sent. The media type
|
1597
|
+
"message/partial" thus indicates that the body contains a fragment of
|
1598
|
+
a larger entity.
|
1599
|
+
|
1600
|
+
Because data of type "message" may never be encoded in base64 or
|
1601
|
+
quoted-printable, a problem might arise if "message/partial" entities
|
1602
|
+
are constructed in an environment that supports binary or 8bit
|
1603
|
+
transport. The problem is that the binary data would be split into
|
1604
|
+
multiple "message/partial" messages, each of them requiring binary
|
1605
|
+
transport. If such messages were encountered at a gateway into a
|
1606
|
+
7bit transport environment, there would be no way to properly encode
|
1607
|
+
them for the 7bit world, aside from waiting for all of the fragments,
|
1608
|
+
reassembling the inner message, and then encoding the reassembled
|
1609
|
+
data in base64 or quoted-printable. Since it is possible that
|
1610
|
+
different fragments might go through different gateways, even this is
|
1611
|
+
not an acceptable solution. For this reason, it is specified that
|
1612
|
+
entities of type "message/partial" must always have a content-
|
1613
|
+
transfer-encoding of 7bit (the default). In particular, even in
|
1614
|
+
environments that support binary or 8bit transport, the use of a
|
1615
|
+
content- transfer-encoding of "8bit" or "binary" is explicitly
|
1616
|
+
prohibited for MIME entities of type "message/partial". This in turn
|
1617
|
+
implies that the inner message must not use "8bit" or "binary"
|
1618
|
+
encoding.
|
1619
|
+
|
1620
|
+
|
1621
|
+
|
1622
|
+
|
1623
|
+
|
1624
|
+
|
1625
|
+
Freed & Borenstein Standards Track [Page 29]
|
1626
|
+
|
1627
|
+
RFC 2046 Media Types November 1996
|
1628
|
+
|
1629
|
+
|
1630
|
+
Because some message transfer agents may choose to automatically
|
1631
|
+
fragment large messages, and because such agents may use very
|
1632
|
+
different fragmentation thresholds, it is possible that the pieces of
|
1633
|
+
a partial message, upon reassembly, may prove themselves to comprise
|
1634
|
+
a partial message. This is explicitly permitted.
|
1635
|
+
|
1636
|
+
Three parameters must be specified in the Content-Type field of type
|
1637
|
+
"message/partial": The first, "id", is a unique identifier, as close
|
1638
|
+
to a world-unique identifier as possible, to be used to match the
|
1639
|
+
fragments together. (In general, the identifier is essentially a
|
1640
|
+
message-id; if placed in double quotes, it can be ANY message-id, in
|
1641
|
+
accordance with the BNF for "parameter" given in RFC 2045.) The
|
1642
|
+
second, "number", an integer, is the fragment number, which indicates
|
1643
|
+
where this fragment fits into the sequence of fragments. The third,
|
1644
|
+
"total", another integer, is the total number of fragments. This
|
1645
|
+
third subfield is required on the final fragment, and is optional
|
1646
|
+
(though encouraged) on the earlier fragments. Note also that these
|
1647
|
+
parameters may be given in any order.
|
1648
|
+
|
1649
|
+
Thus, the second piece of a 3-piece message may have either of the
|
1650
|
+
following header fields:
|
1651
|
+
|
1652
|
+
Content-Type: Message/Partial; number=2; total=3;
|
1653
|
+
id="oc=jpbe0M2Yt4s@thumper.bellcore.com"
|
1654
|
+
|
1655
|
+
Content-Type: Message/Partial;
|
1656
|
+
id="oc=jpbe0M2Yt4s@thumper.bellcore.com";
|
1657
|
+
number=2
|
1658
|
+
|
1659
|
+
But the third piece MUST specify the total number of fragments:
|
1660
|
+
|
1661
|
+
Content-Type: Message/Partial; number=3; total=3;
|
1662
|
+
id="oc=jpbe0M2Yt4s@thumper.bellcore.com"
|
1663
|
+
|
1664
|
+
Note that fragment numbering begins with 1, not 0.
|
1665
|
+
|
1666
|
+
When the fragments of an entity broken up in this manner are put
|
1667
|
+
together, the result is always a complete MIME entity, which may have
|
1668
|
+
its own Content-Type header field, and thus may contain any other
|
1669
|
+
data type.
|
1670
|
+
|
1671
|
+
5.2.2.1. Message Fragmentation and Reassembly
|
1672
|
+
|
1673
|
+
The semantics of a reassembled partial message must be those of the
|
1674
|
+
"inner" message, rather than of a message containing the inner
|
1675
|
+
message. This makes it possible, for example, to send a large audio
|
1676
|
+
message as several partial messages, and still have it appear to the
|
1677
|
+
recipient as a simple audio message rather than as an encapsulated
|
1678
|
+
|
1679
|
+
|
1680
|
+
|
1681
|
+
Freed & Borenstein Standards Track [Page 30]
|
1682
|
+
|
1683
|
+
RFC 2046 Media Types November 1996
|
1684
|
+
|
1685
|
+
|
1686
|
+
message containing an audio message. That is, the encapsulation of
|
1687
|
+
the message is considered to be "transparent".
|
1688
|
+
|
1689
|
+
When generating and reassembling the pieces of a "message/partial"
|
1690
|
+
message, the headers of the encapsulated message must be merged with
|
1691
|
+
the headers of the enclosing entities. In this process the following
|
1692
|
+
rules must be observed:
|
1693
|
+
|
1694
|
+
(1) Fragmentation agents must split messages at line
|
1695
|
+
boundaries only. This restriction is imposed because
|
1696
|
+
splits at points other than the ends of lines in turn
|
1697
|
+
depends on message transports being able to preserve
|
1698
|
+
the semantics of messages that don't end with a CRLF
|
1699
|
+
sequence. Many transports are incapable of preserving
|
1700
|
+
such semantics.
|
1701
|
+
|
1702
|
+
(2) All of the header fields from the initial enclosing
|
1703
|
+
message, except those that start with "Content-" and
|
1704
|
+
the specific header fields "Subject", "Message-ID",
|
1705
|
+
"Encrypted", and "MIME-Version", must be copied, in
|
1706
|
+
order, to the new message.
|
1707
|
+
|
1708
|
+
(3) The header fields in the enclosed message which start
|
1709
|
+
with "Content-", plus the "Subject", "Message-ID",
|
1710
|
+
"Encrypted", and "MIME-Version" fields, must be
|
1711
|
+
appended, in order, to the header fields of the new
|
1712
|
+
message. Any header fields in the enclosed message
|
1713
|
+
which do not start with "Content-" (except for the
|
1714
|
+
"Subject", "Message-ID", "Encrypted", and "MIME-
|
1715
|
+
Version" fields) will be ignored and dropped.
|
1716
|
+
|
1717
|
+
(4) All of the header fields from the second and any
|
1718
|
+
subsequent enclosing messages are discarded by the
|
1719
|
+
reassembly process.
|
1720
|
+
|
1721
|
+
5.2.2.2. Fragmentation and Reassembly Example
|
1722
|
+
|
1723
|
+
If an audio message is broken into two pieces, the first piece might
|
1724
|
+
look something like this:
|
1725
|
+
|
1726
|
+
X-Weird-Header-1: Foo
|
1727
|
+
From: Bill@host.com
|
1728
|
+
To: joe@otherhost.com
|
1729
|
+
Date: Fri, 26 Mar 1993 12:59:38 -0500 (EST)
|
1730
|
+
Subject: Audio mail (part 1 of 2)
|
1731
|
+
Message-ID: <id1@host.com>
|
1732
|
+
MIME-Version: 1.0
|
1733
|
+
Content-type: message/partial; id="ABC@host.com";
|
1734
|
+
|
1735
|
+
|
1736
|
+
|
1737
|
+
Freed & Borenstein Standards Track [Page 31]
|
1738
|
+
|
1739
|
+
RFC 2046 Media Types November 1996
|
1740
|
+
|
1741
|
+
|
1742
|
+
number=1; total=2
|
1743
|
+
|
1744
|
+
X-Weird-Header-1: Bar
|
1745
|
+
X-Weird-Header-2: Hello
|
1746
|
+
Message-ID: <anotherid@foo.com>
|
1747
|
+
Subject: Audio mail
|
1748
|
+
MIME-Version: 1.0
|
1749
|
+
Content-type: audio/basic
|
1750
|
+
Content-transfer-encoding: base64
|
1751
|
+
|
1752
|
+
... first half of encoded audio data goes here ...
|
1753
|
+
|
1754
|
+
and the second half might look something like this:
|
1755
|
+
|
1756
|
+
From: Bill@host.com
|
1757
|
+
To: joe@otherhost.com
|
1758
|
+
Date: Fri, 26 Mar 1993 12:59:38 -0500 (EST)
|
1759
|
+
Subject: Audio mail (part 2 of 2)
|
1760
|
+
MIME-Version: 1.0
|
1761
|
+
Message-ID: <id2@host.com>
|
1762
|
+
Content-type: message/partial;
|
1763
|
+
id="ABC@host.com"; number=2; total=2
|
1764
|
+
|
1765
|
+
... second half of encoded audio data goes here ...
|
1766
|
+
|
1767
|
+
Then, when the fragmented message is reassembled, the resulting
|
1768
|
+
message to be displayed to the user should look something like this:
|
1769
|
+
|
1770
|
+
X-Weird-Header-1: Foo
|
1771
|
+
From: Bill@host.com
|
1772
|
+
To: joe@otherhost.com
|
1773
|
+
Date: Fri, 26 Mar 1993 12:59:38 -0500 (EST)
|
1774
|
+
Subject: Audio mail
|
1775
|
+
Message-ID: <anotherid@foo.com>
|
1776
|
+
MIME-Version: 1.0
|
1777
|
+
Content-type: audio/basic
|
1778
|
+
Content-transfer-encoding: base64
|
1779
|
+
|
1780
|
+
... first half of encoded audio data goes here ...
|
1781
|
+
... second half of encoded audio data goes here ...
|
1782
|
+
|
1783
|
+
The inclusion of a "References" field in the headers of the second
|
1784
|
+
and subsequent pieces of a fragmented message that references the
|
1785
|
+
Message-Id on the previous piece may be of benefit to mail readers
|
1786
|
+
that understand and track references. However, the generation of
|
1787
|
+
such "References" fields is entirely optional.
|
1788
|
+
|
1789
|
+
|
1790
|
+
|
1791
|
+
|
1792
|
+
|
1793
|
+
Freed & Borenstein Standards Track [Page 32]
|
1794
|
+
|
1795
|
+
RFC 2046 Media Types November 1996
|
1796
|
+
|
1797
|
+
|
1798
|
+
Finally, it should be noted that the "Encrypted" header field has
|
1799
|
+
been made obsolete by Privacy Enhanced Messaging (PEM) [RFC-1421,
|
1800
|
+
RFC-1422, RFC-1423, RFC-1424], but the rules above are nevertheless
|
1801
|
+
believed to describe the correct way to treat it if it is encountered
|
1802
|
+
in the context of conversion to and from "message/partial" fragments.
|
1803
|
+
|
1804
|
+
5.2.3. External-Body Subtype
|
1805
|
+
|
1806
|
+
The external-body subtype indicates that the actual body data are not
|
1807
|
+
included, but merely referenced. In this case, the parameters
|
1808
|
+
describe a mechanism for accessing the external data.
|
1809
|
+
|
1810
|
+
When a MIME entity is of type "message/external-body", it consists of
|
1811
|
+
a header, two consecutive CRLFs, and the message header for the
|
1812
|
+
encapsulated message. If another pair of consecutive CRLFs appears,
|
1813
|
+
this of course ends the message header for the encapsulated message.
|
1814
|
+
However, since the encapsulated message's body is itself external, it
|
1815
|
+
does NOT appear in the area that follows. For example, consider the
|
1816
|
+
following message:
|
1817
|
+
|
1818
|
+
Content-type: message/external-body;
|
1819
|
+
access-type=local-file;
|
1820
|
+
name="/u/nsb/Me.jpeg"
|
1821
|
+
|
1822
|
+
Content-type: image/jpeg
|
1823
|
+
Content-ID: <id42@guppylake.bellcore.com>
|
1824
|
+
Content-Transfer-Encoding: binary
|
1825
|
+
|
1826
|
+
THIS IS NOT REALLY THE BODY!
|
1827
|
+
|
1828
|
+
The area at the end, which might be called the "phantom body", is
|
1829
|
+
ignored for most external-body messages. However, it may be used to
|
1830
|
+
contain auxiliary information for some such messages, as indeed it is
|
1831
|
+
when the access-type is "mail- server". The only access-type defined
|
1832
|
+
in this document that uses the phantom body is "mail-server", but
|
1833
|
+
other access-types may be defined in the future in other
|
1834
|
+
specifications that use this area.
|
1835
|
+
|
1836
|
+
The encapsulated headers in ALL "message/external-body" entities MUST
|
1837
|
+
include a Content-ID header field to give a unique identifier by
|
1838
|
+
which to reference the data. This identifier may be used for caching
|
1839
|
+
mechanisms, and for recognizing the receipt of the data when the
|
1840
|
+
access-type is "mail-server".
|
1841
|
+
|
1842
|
+
Note that, as specified here, the tokens that describe external-body
|
1843
|
+
data, such as file names and mail server commands, are required to be
|
1844
|
+
in the US-ASCII character set.
|
1845
|
+
|
1846
|
+
|
1847
|
+
|
1848
|
+
|
1849
|
+
Freed & Borenstein Standards Track [Page 33]
|
1850
|
+
|
1851
|
+
RFC 2046 Media Types November 1996
|
1852
|
+
|
1853
|
+
|
1854
|
+
If this proves problematic in practice, a new mechanism may be
|
1855
|
+
required as a future extension to MIME, either as newly defined
|
1856
|
+
access-types for "message/external-body" or by some other mechanism.
|
1857
|
+
|
1858
|
+
As with "message/partial", MIME entities of type "message/external-
|
1859
|
+
body" MUST have a content-transfer-encoding of 7bit (the default).
|
1860
|
+
In particular, even in environments that support binary or 8bit
|
1861
|
+
transport, the use of a content- transfer-encoding of "8bit" or
|
1862
|
+
"binary" is explicitly prohibited for entities of type
|
1863
|
+
"message/external-body".
|
1864
|
+
|
1865
|
+
5.2.3.1. General External-Body Parameters
|
1866
|
+
|
1867
|
+
The parameters that may be used with any "message/external- body"
|
1868
|
+
are:
|
1869
|
+
|
1870
|
+
(1) ACCESS-TYPE -- A word indicating the supported access
|
1871
|
+
mechanism by which the file or data may be obtained.
|
1872
|
+
This word is not case sensitive. Values include, but
|
1873
|
+
are not limited to, "FTP", "ANON-FTP", "TFTP", "LOCAL-
|
1874
|
+
FILE", and "MAIL-SERVER". Future values, except for
|
1875
|
+
experimental values beginning with "X-", must be
|
1876
|
+
registered with IANA, as described in RFC 2048.
|
1877
|
+
This parameter is unconditionally mandatory and MUST be
|
1878
|
+
present on EVERY "message/external-body".
|
1879
|
+
|
1880
|
+
(2) EXPIRATION -- The date (in the RFC 822 "date-time"
|
1881
|
+
syntax, as extended by RFC 1123 to permit 4 digits in
|
1882
|
+
the year field) after which the existence of the
|
1883
|
+
external data is not guaranteed. This parameter may be
|
1884
|
+
used with ANY access-type and is ALWAYS optional.
|
1885
|
+
|
1886
|
+
(3) SIZE -- The size (in octets) of the data. The intent
|
1887
|
+
of this parameter is to help the recipient decide
|
1888
|
+
whether or not to expend the necessary resources to
|
1889
|
+
retrieve the external data. Note that this describes
|
1890
|
+
the size of the data in its canonical form, that is,
|
1891
|
+
before any Content-Transfer-Encoding has been applied
|
1892
|
+
or after the data have been decoded. This parameter
|
1893
|
+
may be used with ANY access-type and is ALWAYS
|
1894
|
+
optional.
|
1895
|
+
|
1896
|
+
(4) PERMISSION -- A case-insensitive field that indicates
|
1897
|
+
whether or not it is expected that clients might also
|
1898
|
+
attempt to overwrite the data. By default, or if
|
1899
|
+
permission is "read", the assumption is that they are
|
1900
|
+
not, and that if the data is retrieved once, it is
|
1901
|
+
never needed again. If PERMISSION is "read-write",
|
1902
|
+
|
1903
|
+
|
1904
|
+
|
1905
|
+
Freed & Borenstein Standards Track [Page 34]
|
1906
|
+
|
1907
|
+
RFC 2046 Media Types November 1996
|
1908
|
+
|
1909
|
+
|
1910
|
+
this assumption is invalid, and any local copy must be
|
1911
|
+
considered no more than a cache. "Read" and "Read-
|
1912
|
+
write" are the only defined values of permission. This
|
1913
|
+
parameter may be used with ANY access-type and is
|
1914
|
+
ALWAYS optional.
|
1915
|
+
|
1916
|
+
The precise semantics of the access-types defined here are described
|
1917
|
+
in the sections that follow.
|
1918
|
+
|
1919
|
+
5.2.3.2. The 'ftp' and 'tftp' Access-Types
|
1920
|
+
|
1921
|
+
An access-type of FTP or TFTP indicates that the message body is
|
1922
|
+
accessible as a file using the FTP [RFC-959] or TFTP [RFC- 783]
|
1923
|
+
protocols, respectively. For these access-types, the following
|
1924
|
+
additional parameters are mandatory:
|
1925
|
+
|
1926
|
+
(1) NAME -- The name of the file that contains the actual
|
1927
|
+
body data.
|
1928
|
+
|
1929
|
+
(2) SITE -- A machine from which the file may be obtained,
|
1930
|
+
using the given protocol. This must be a fully
|
1931
|
+
qualified domain name, not a nickname.
|
1932
|
+
|
1933
|
+
(3) Before any data are retrieved, using FTP, the user will
|
1934
|
+
generally need to be asked to provide a login id and a
|
1935
|
+
password for the machine named by the site parameter.
|
1936
|
+
For security reasons, such an id and password are not
|
1937
|
+
specified as content-type parameters, but must be
|
1938
|
+
obtained from the user.
|
1939
|
+
|
1940
|
+
In addition, the following parameters are optional:
|
1941
|
+
|
1942
|
+
(1) DIRECTORY -- A directory from which the data named by
|
1943
|
+
NAME should be retrieved.
|
1944
|
+
|
1945
|
+
(2) MODE -- A case-insensitive string indicating the mode
|
1946
|
+
to be used when retrieving the information. The valid
|
1947
|
+
values for access-type "TFTP" are "NETASCII", "OCTET",
|
1948
|
+
and "MAIL", as specified by the TFTP protocol [RFC-
|
1949
|
+
783]. The valid values for access-type "FTP" are
|
1950
|
+
"ASCII", "EBCDIC", "IMAGE", and "LOCALn" where "n" is a
|
1951
|
+
decimal integer, typically 8. These correspond to the
|
1952
|
+
representation types "A" "E" "I" and "L n" as specified
|
1953
|
+
by the FTP protocol [RFC-959]. Note that "BINARY" and
|
1954
|
+
"TENEX" are not valid values for MODE and that "OCTET"
|
1955
|
+
or "IMAGE" or "LOCAL8" should be used instead. IF MODE
|
1956
|
+
is not specified, the default value is "NETASCII" for
|
1957
|
+
TFTP and "ASCII" otherwise.
|
1958
|
+
|
1959
|
+
|
1960
|
+
|
1961
|
+
Freed & Borenstein Standards Track [Page 35]
|
1962
|
+
|
1963
|
+
RFC 2046 Media Types November 1996
|
1964
|
+
|
1965
|
+
|
1966
|
+
5.2.3.3. The 'anon-ftp' Access-Type
|
1967
|
+
|
1968
|
+
The "anon-ftp" access-type is identical to the "ftp" access type,
|
1969
|
+
except that the user need not be asked to provide a name and password
|
1970
|
+
for the specified site. Instead, the ftp protocol will be used with
|
1971
|
+
login "anonymous" and a password that corresponds to the user's mail
|
1972
|
+
address.
|
1973
|
+
|
1974
|
+
5.2.3.4. The 'local-file' Access-Type
|
1975
|
+
|
1976
|
+
An access-type of "local-file" indicates that the actual body is
|
1977
|
+
accessible as a file on the local machine. Two additional parameters
|
1978
|
+
are defined for this access type:
|
1979
|
+
|
1980
|
+
(1) NAME -- The name of the file that contains the actual
|
1981
|
+
body data. This parameter is mandatory for the
|
1982
|
+
"local-file" access-type.
|
1983
|
+
|
1984
|
+
(2) SITE -- A domain specifier for a machine or set of
|
1985
|
+
machines that are known to have access to the data
|
1986
|
+
file. This optional parameter is used to describe the
|
1987
|
+
locality of reference for the data, that is, the site
|
1988
|
+
or sites at which the file is expected to be visible.
|
1989
|
+
Asterisks may be used for wildcard matching to a part
|
1990
|
+
of a domain name, such as "*.bellcore.com", to indicate
|
1991
|
+
a set of machines on which the data should be directly
|
1992
|
+
visible, while a single asterisk may be used to
|
1993
|
+
indicate a file that is expected to be universally
|
1994
|
+
available, e.g., via a global file system.
|
1995
|
+
|
1996
|
+
5.2.3.5. The 'mail-server' Access-Type
|
1997
|
+
|
1998
|
+
The "mail-server" access-type indicates that the actual body is
|
1999
|
+
available from a mail server. Two additional parameters are defined
|
2000
|
+
for this access-type:
|
2001
|
+
|
2002
|
+
(1) SERVER -- The addr-spec of the mail server from which
|
2003
|
+
the actual body data can be obtained. This parameter
|
2004
|
+
is mandatory for the "mail-server" access-type.
|
2005
|
+
|
2006
|
+
(2) SUBJECT -- The subject that is to be used in the mail
|
2007
|
+
that is sent to obtain the data. Note that keying mail
|
2008
|
+
servers on Subject lines is NOT recommended, but such
|
2009
|
+
mail servers are known to exist. This is an optional
|
2010
|
+
parameter.
|
2011
|
+
|
2012
|
+
|
2013
|
+
|
2014
|
+
|
2015
|
+
|
2016
|
+
|
2017
|
+
Freed & Borenstein Standards Track [Page 36]
|
2018
|
+
|
2019
|
+
RFC 2046 Media Types November 1996
|
2020
|
+
|
2021
|
+
|
2022
|
+
Because mail servers accept a variety of syntaxes, some of which is
|
2023
|
+
multiline, the full command to be sent to a mail server is not
|
2024
|
+
included as a parameter in the content-type header field. Instead,
|
2025
|
+
it is provided as the "phantom body" when the media type is
|
2026
|
+
"message/external-body" and the access-type is mail-server.
|
2027
|
+
|
2028
|
+
Note that MIME does not define a mail server syntax. Rather, it
|
2029
|
+
allows the inclusion of arbitrary mail server commands in the phantom
|
2030
|
+
body. Implementations must include the phantom body in the body of
|
2031
|
+
the message it sends to the mail server address to retrieve the
|
2032
|
+
relevant data.
|
2033
|
+
|
2034
|
+
Unlike other access-types, mail-server access is asynchronous and
|
2035
|
+
will happen at an unpredictable time in the future. For this reason,
|
2036
|
+
it is important that there be a mechanism by which the returned data
|
2037
|
+
can be matched up with the original "message/external-body" entity.
|
2038
|
+
MIME mail servers must use the same Content-ID field on the returned
|
2039
|
+
message that was used in the original "message/external-body"
|
2040
|
+
entities, to facilitate such matching.
|
2041
|
+
|
2042
|
+
5.2.3.6. External-Body Security Issues
|
2043
|
+
|
2044
|
+
"Message/external-body" entities give rise to two important security
|
2045
|
+
issues:
|
2046
|
+
|
2047
|
+
(1) Accessing data via a "message/external-body" reference
|
2048
|
+
effectively results in the message recipient performing
|
2049
|
+
an operation that was specified by the message
|
2050
|
+
originator. It is therefore possible for the message
|
2051
|
+
originator to trick a recipient into doing something
|
2052
|
+
they would not have done otherwise. For example, an
|
2053
|
+
originator could specify a action that attempts
|
2054
|
+
retrieval of material that the recipient is not
|
2055
|
+
authorized to obtain, causing the recipient to
|
2056
|
+
unwittingly violate some security policy. For this
|
2057
|
+
reason, user agents capable of resolving external
|
2058
|
+
references must always take steps to describe the
|
2059
|
+
action they are to take to the recipient and ask for
|
2060
|
+
explicit permisssion prior to performing it.
|
2061
|
+
|
2062
|
+
The 'mail-server' access-type is particularly
|
2063
|
+
vulnerable, in that it causes the recipient to send a
|
2064
|
+
new message whose contents are specified by the
|
2065
|
+
original message's originator. Given the potential for
|
2066
|
+
abuse, any such request messages that are constructed
|
2067
|
+
should contain a clear indication that they were
|
2068
|
+
generated automatically (e.g. in a Comments: header
|
2069
|
+
field) in an attempt to resolve a MIME
|
2070
|
+
|
2071
|
+
|
2072
|
+
|
2073
|
+
Freed & Borenstein Standards Track [Page 37]
|
2074
|
+
|
2075
|
+
RFC 2046 Media Types November 1996
|
2076
|
+
|
2077
|
+
|
2078
|
+
"message/external-body" reference.
|
2079
|
+
|
2080
|
+
(2) MIME will sometimes be used in environments that
|
2081
|
+
provide some guarantee of message integrity and
|
2082
|
+
authenticity. If present, such guarantees may apply
|
2083
|
+
only to the actual direct content of messages -- they
|
2084
|
+
may or may not apply to data accessed through MIME's
|
2085
|
+
"message/external-body" mechanism. In particular, it
|
2086
|
+
may be possible to subvert certain access mechanisms
|
2087
|
+
even when the messaging system itself is secure.
|
2088
|
+
|
2089
|
+
It should be noted that this problem exists either with
|
2090
|
+
or without the availabilty of MIME mechanisms. A
|
2091
|
+
casual reference to an FTP site containing a document
|
2092
|
+
in the text of a secure message brings up similar
|
2093
|
+
issues -- the only difference is that MIME provides for
|
2094
|
+
automatic retrieval of such material, and users may
|
2095
|
+
place unwarranted trust is such automatic retrieval
|
2096
|
+
mechanisms.
|
2097
|
+
|
2098
|
+
5.2.3.7. Examples and Further Explanations
|
2099
|
+
|
2100
|
+
When the external-body mechanism is used in conjunction with the
|
2101
|
+
"multipart/alternative" media type it extends the functionality of
|
2102
|
+
"multipart/alternative" to include the case where the same entity is
|
2103
|
+
provided in the same format but via different accces mechanisms.
|
2104
|
+
When this is done the originator of the message must order the parts
|
2105
|
+
first in terms of preferred formats and then by preferred access
|
2106
|
+
mechanisms. The recipient's viewer should then evaluate the list
|
2107
|
+
both in terms of format and access mechanisms.
|
2108
|
+
|
2109
|
+
With the emerging possibility of very wide-area file systems, it
|
2110
|
+
becomes very hard to know in advance the set of machines where a file
|
2111
|
+
will and will not be accessible directly from the file system.
|
2112
|
+
Therefore it may make sense to provide both a file name, to be tried
|
2113
|
+
directly, and the name of one or more sites from which the file is
|
2114
|
+
known to be accessible. An implementation can try to retrieve remote
|
2115
|
+
files using FTP or any other protocol, using anonymous file retrieval
|
2116
|
+
or prompting the user for the necessary name and password. If an
|
2117
|
+
external body is accessible via multiple mechanisms, the sender may
|
2118
|
+
include multiple entities of type "message/external-body" within the
|
2119
|
+
body parts of an enclosing "multipart/alternative" entity.
|
2120
|
+
|
2121
|
+
However, the external-body mechanism is not intended to be limited to
|
2122
|
+
file retrieval, as shown by the mail-server access-type. Beyond
|
2123
|
+
this, one can imagine, for example, using a video server for external
|
2124
|
+
references to video clips.
|
2125
|
+
|
2126
|
+
|
2127
|
+
|
2128
|
+
|
2129
|
+
Freed & Borenstein Standards Track [Page 38]
|
2130
|
+
|
2131
|
+
RFC 2046 Media Types November 1996
|
2132
|
+
|
2133
|
+
|
2134
|
+
The embedded message header fields which appear in the body of the
|
2135
|
+
"message/external-body" data must be used to declare the media type
|
2136
|
+
of the external body if it is anything other than plain US-ASCII
|
2137
|
+
text, since the external body does not have a header section to
|
2138
|
+
declare its type. Similarly, any Content-transfer-encoding other
|
2139
|
+
than "7bit" must also be declared here. Thus a complete
|
2140
|
+
"message/external-body" message, referring to an object in PostScript
|
2141
|
+
format, might look like this:
|
2142
|
+
|
2143
|
+
From: Whomever
|
2144
|
+
To: Someone
|
2145
|
+
Date: Whenever
|
2146
|
+
Subject: whatever
|
2147
|
+
MIME-Version: 1.0
|
2148
|
+
Message-ID: <id1@host.com>
|
2149
|
+
Content-Type: multipart/alternative; boundary=42
|
2150
|
+
Content-ID: <id001@guppylake.bellcore.com>
|
2151
|
+
|
2152
|
+
--42
|
2153
|
+
Content-Type: message/external-body; name="BodyFormats.ps";
|
2154
|
+
site="thumper.bellcore.com"; mode="image";
|
2155
|
+
access-type=ANON-FTP; directory="pub";
|
2156
|
+
expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"
|
2157
|
+
|
2158
|
+
Content-type: application/postscript
|
2159
|
+
Content-ID: <id42@guppylake.bellcore.com>
|
2160
|
+
|
2161
|
+
--42
|
2162
|
+
Content-Type: message/external-body; access-type=local-file;
|
2163
|
+
name="/u/nsb/writing/rfcs/RFC-MIME.ps";
|
2164
|
+
site="thumper.bellcore.com";
|
2165
|
+
expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"
|
2166
|
+
|
2167
|
+
Content-type: application/postscript
|
2168
|
+
Content-ID: <id42@guppylake.bellcore.com>
|
2169
|
+
|
2170
|
+
--42
|
2171
|
+
Content-Type: message/external-body;
|
2172
|
+
access-type=mail-server
|
2173
|
+
server="listserv@bogus.bitnet";
|
2174
|
+
expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)"
|
2175
|
+
|
2176
|
+
Content-type: application/postscript
|
2177
|
+
Content-ID: <id42@guppylake.bellcore.com>
|
2178
|
+
|
2179
|
+
get RFC-MIME.DOC
|
2180
|
+
|
2181
|
+
--42--
|
2182
|
+
|
2183
|
+
|
2184
|
+
|
2185
|
+
Freed & Borenstein Standards Track [Page 39]
|
2186
|
+
|
2187
|
+
RFC 2046 Media Types November 1996
|
2188
|
+
|
2189
|
+
|
2190
|
+
Note that in the above examples, the default Content-transfer-
|
2191
|
+
encoding of "7bit" is assumed for the external postscript data.
|
2192
|
+
|
2193
|
+
Like the "message/partial" type, the "message/external-body" media
|
2194
|
+
type is intended to be transparent, that is, to convey the data type
|
2195
|
+
in the external body rather than to convey a message with a body of
|
2196
|
+
that type. Thus the headers on the outer and inner parts must be
|
2197
|
+
merged using the same rules as for "message/partial". In particular,
|
2198
|
+
this means that the Content-type and Subject fields are overridden,
|
2199
|
+
but the From field is preserved.
|
2200
|
+
|
2201
|
+
Note that since the external bodies are not transported along with
|
2202
|
+
the external body reference, they need not conform to transport
|
2203
|
+
limitations that apply to the reference itself. In particular,
|
2204
|
+
Internet mail transports may impose 7bit and line length limits, but
|
2205
|
+
these do not automatically apply to binary external body references.
|
2206
|
+
Thus a Content-Transfer-Encoding is not generally necessary, though
|
2207
|
+
it is permitted.
|
2208
|
+
|
2209
|
+
Note that the body of a message of type "message/external-body" is
|
2210
|
+
governed by the basic syntax for an RFC 822 message. In particular,
|
2211
|
+
anything before the first consecutive pair of CRLFs is header
|
2212
|
+
information, while anything after it is body information, which is
|
2213
|
+
ignored for most access-types.
|
2214
|
+
|
2215
|
+
5.2.4. Other Message Subtypes
|
2216
|
+
|
2217
|
+
MIME implementations must in general treat unrecognized subtypes of
|
2218
|
+
"message" as being equivalent to "application/octet-stream".
|
2219
|
+
|
2220
|
+
Future subtypes of "message" intended for use with email should be
|
2221
|
+
restricted to "7bit" encoding. A type other than "message" should be
|
2222
|
+
used if restriction to "7bit" is not possible.
|
2223
|
+
|
2224
|
+
6. Experimental Media Type Values
|
2225
|
+
|
2226
|
+
A media type value beginning with the characters "X-" is a private
|
2227
|
+
value, to be used by consenting systems by mutual agreement. Any
|
2228
|
+
format without a rigorous and public definition must be named with an
|
2229
|
+
"X-" prefix, and publicly specified values shall never begin with
|
2230
|
+
"X-". (Older versions of the widely used Andrew system use the "X-
|
2231
|
+
BE2" name, so new systems should probably choose a different name.)
|
2232
|
+
|
2233
|
+
In general, the use of "X-" top-level types is strongly discouraged.
|
2234
|
+
Implementors should invent subtypes of the existing types whenever
|
2235
|
+
possible. In many cases, a subtype of "application" will be more
|
2236
|
+
appropriate than a new top-level type.
|
2237
|
+
|
2238
|
+
|
2239
|
+
|
2240
|
+
|
2241
|
+
Freed & Borenstein Standards Track [Page 40]
|
2242
|
+
|
2243
|
+
RFC 2046 Media Types November 1996
|
2244
|
+
|
2245
|
+
|
2246
|
+
7. Summary
|
2247
|
+
|
2248
|
+
The five discrete media types provide provide a standardized
|
2249
|
+
mechanism for tagging entities as "audio", "image", or several other
|
2250
|
+
kinds of data. The composite "multipart" and "message" media types
|
2251
|
+
allow mixing and hierarchical structuring of entities of different
|
2252
|
+
types in a single message. A distinguished parameter syntax allows
|
2253
|
+
further specification of data format details, particularly the
|
2254
|
+
specification of alternate character sets. Additional optional
|
2255
|
+
header fields provide mechanisms for certain extensions deemed
|
2256
|
+
desirable by many implementors. Finally, a number of useful media
|
2257
|
+
types are defined for general use by consenting user agents, notably
|
2258
|
+
"message/partial" and "message/external-body".
|
2259
|
+
|
2260
|
+
9. Security Considerations
|
2261
|
+
|
2262
|
+
Security issues are discussed in the context of the
|
2263
|
+
"application/postscript" type, the "message/external-body" type, and
|
2264
|
+
in RFC 2048. Implementors should pay special attention to the
|
2265
|
+
security implications of any media types that can cause the remote
|
2266
|
+
execution of any actions in the recipient's environment. In such
|
2267
|
+
cases, the discussion of the "application/postscript" type may serve
|
2268
|
+
as a model for considering other media types with remote execution
|
2269
|
+
capabilities.
|
2270
|
+
|
2271
|
+
|
2272
|
+
|
2273
|
+
|
2274
|
+
|
2275
|
+
|
2276
|
+
|
2277
|
+
|
2278
|
+
|
2279
|
+
|
2280
|
+
|
2281
|
+
|
2282
|
+
|
2283
|
+
|
2284
|
+
|
2285
|
+
|
2286
|
+
|
2287
|
+
|
2288
|
+
|
2289
|
+
|
2290
|
+
|
2291
|
+
|
2292
|
+
|
2293
|
+
|
2294
|
+
|
2295
|
+
|
2296
|
+
|
2297
|
+
Freed & Borenstein Standards Track [Page 41]
|
2298
|
+
|
2299
|
+
RFC 2046 Media Types November 1996
|
2300
|
+
|
2301
|
+
|
2302
|
+
9. Authors' Addresses
|
2303
|
+
|
2304
|
+
For more information, the authors of this document are best contacted
|
2305
|
+
via Internet mail:
|
2306
|
+
|
2307
|
+
Ned Freed
|
2308
|
+
Innosoft International, Inc.
|
2309
|
+
1050 East Garvey Avenue South
|
2310
|
+
West Covina, CA 91790
|
2311
|
+
USA
|
2312
|
+
|
2313
|
+
Phone: +1 818 919 3600
|
2314
|
+
Fax: +1 818 919 3614
|
2315
|
+
EMail: ned@innosoft.com
|
2316
|
+
|
2317
|
+
|
2318
|
+
Nathaniel S. Borenstein
|
2319
|
+
First Virtual Holdings
|
2320
|
+
25 Washington Avenue
|
2321
|
+
Morristown, NJ 07960
|
2322
|
+
USA
|
2323
|
+
|
2324
|
+
Phone: +1 201 540 8967
|
2325
|
+
Fax: +1 201 993 3032
|
2326
|
+
EMail: nsb@nsb.fv.com
|
2327
|
+
|
2328
|
+
|
2329
|
+
MIME is a result of the work of the Internet Engineering Task Force
|
2330
|
+
Working Group on RFC 822 Extensions. The chairman of that group,
|
2331
|
+
Greg Vaudreuil, may be reached at:
|
2332
|
+
|
2333
|
+
Gregory M. Vaudreuil
|
2334
|
+
Octel Network Services
|
2335
|
+
17080 Dallas Parkway
|
2336
|
+
Dallas, TX 75248-1905
|
2337
|
+
USA
|
2338
|
+
|
2339
|
+
EMail: Greg.Vaudreuil@Octel.Com
|
2340
|
+
|
2341
|
+
|
2342
|
+
|
2343
|
+
|
2344
|
+
|
2345
|
+
|
2346
|
+
|
2347
|
+
|
2348
|
+
|
2349
|
+
|
2350
|
+
|
2351
|
+
|
2352
|
+
|
2353
|
+
Freed & Borenstein Standards Track [Page 42]
|
2354
|
+
|
2355
|
+
RFC 2046 Media Types November 1996
|
2356
|
+
|
2357
|
+
|
2358
|
+
Appendix A -- Collected Grammar
|
2359
|
+
|
2360
|
+
This appendix contains the complete BNF grammar for all the syntax
|
2361
|
+
specified by this document.
|
2362
|
+
|
2363
|
+
By itself, however, this grammar is incomplete. It refers by name to
|
2364
|
+
several syntax rules that are defined by RFC 822. Rather than
|
2365
|
+
reproduce those definitions here, and risk unintentional differences
|
2366
|
+
between the two, this document simply refers the reader to RFC 822
|
2367
|
+
for the remaining definitions. Wherever a term is undefined, it
|
2368
|
+
refers to the RFC 822 definition.
|
2369
|
+
|
2370
|
+
boundary := 0*69<bchars> bcharsnospace
|
2371
|
+
|
2372
|
+
bchars := bcharsnospace / " "
|
2373
|
+
|
2374
|
+
bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" /
|
2375
|
+
"+" / "_" / "," / "-" / "." /
|
2376
|
+
"/" / ":" / "=" / "?"
|
2377
|
+
|
2378
|
+
body-part := <"message" as defined in RFC 822, with all
|
2379
|
+
header fields optional, not starting with the
|
2380
|
+
specified dash-boundary, and with the
|
2381
|
+
delimiter not occurring anywhere in the
|
2382
|
+
body part. Note that the semantics of a
|
2383
|
+
part differ from the semantics of a message,
|
2384
|
+
as described in the text.>
|
2385
|
+
|
2386
|
+
close-delimiter := delimiter "--"
|
2387
|
+
|
2388
|
+
dash-boundary := "--" boundary
|
2389
|
+
; boundary taken from the value of
|
2390
|
+
; boundary parameter of the
|
2391
|
+
; Content-Type field.
|
2392
|
+
|
2393
|
+
delimiter := CRLF dash-boundary
|
2394
|
+
|
2395
|
+
discard-text := *(*text CRLF)
|
2396
|
+
; May be ignored or discarded.
|
2397
|
+
|
2398
|
+
encapsulation := delimiter transport-padding
|
2399
|
+
CRLF body-part
|
2400
|
+
|
2401
|
+
epilogue := discard-text
|
2402
|
+
|
2403
|
+
multipart-body := [preamble CRLF]
|
2404
|
+
dash-boundary transport-padding CRLF
|
2405
|
+
body-part *encapsulation
|
2406
|
+
|
2407
|
+
|
2408
|
+
|
2409
|
+
Freed & Borenstein Standards Track [Page 43]
|
2410
|
+
|
2411
|
+
RFC 2046 Media Types November 1996
|
2412
|
+
|
2413
|
+
|
2414
|
+
close-delimiter transport-padding
|
2415
|
+
[CRLF epilogue]
|
2416
|
+
|
2417
|
+
preamble := discard-text
|
2418
|
+
|
2419
|
+
transport-padding := *LWSP-char
|
2420
|
+
; Composers MUST NOT generate
|
2421
|
+
; non-zero length transport
|
2422
|
+
; padding, but receivers MUST
|
2423
|
+
; be able to handle padding
|
2424
|
+
; added by message transports.
|
2425
|
+
|
2426
|
+
|
2427
|
+
|
2428
|
+
|
2429
|
+
|
2430
|
+
|
2431
|
+
|
2432
|
+
|
2433
|
+
|
2434
|
+
|
2435
|
+
|
2436
|
+
|
2437
|
+
|
2438
|
+
|
2439
|
+
|
2440
|
+
|
2441
|
+
|
2442
|
+
|
2443
|
+
|
2444
|
+
|
2445
|
+
|
2446
|
+
|
2447
|
+
|
2448
|
+
|
2449
|
+
|
2450
|
+
|
2451
|
+
|
2452
|
+
|
2453
|
+
|
2454
|
+
|
2455
|
+
|
2456
|
+
|
2457
|
+
|
2458
|
+
|
2459
|
+
|
2460
|
+
|
2461
|
+
|
2462
|
+
|
2463
|
+
|
2464
|
+
|
2465
|
+
Freed & Borenstein Standards Track [Page 44]
|
2466
|
+
|
2467
|
+
|