RFC 2049: MIME Part Five: Conformance Criteria and Examples

Defines MIME conformance levels and provides worked examples for implementers.
Alaa
By Alaa
SMTPedia documents email infrastructure end to end: SMTP standards from the RFC archive, delivera...
7 min read Updated Jul 22, 2026 76 views
RFC 2049
MIME Part Five: Conformance Criteria and Examples
Current standard
Domain
MIME
Published
November 1996
Supersedes
First in series
SMTP relevance
Medium
↗ Read on rfc-editor.org

What this RFC defines

RFC 2049 is the fifth and final RFC in the MIME suite. It defines conformance levels for MIME implementations, specifying what a MIME-compliant mail reader must support, should support, and may support. It also provides worked examples of MIME messages to illustrate correct implementation.

Where you see it in practice

When an email client is described as MIME-compliant, the conformance requirements it meets are defined in RFC 2049. The document clarifies which parts of the MIME specification are mandatory versus optional, helping implementors understand the minimum requirements for interoperability. Its examples remain useful references for debugging MIME encoding issues.

How it connects to other RFCs

RFC 2049 is the fifth part of the MIME suite alongside RFC 2045 (framework), RFC 2046 (media types), RFC 2047 (header encoding), and RFC 2048 (registration, now replaced by RFC 4288). All five work together as a single specification for internet message content.

Current status

RFC 2049 is a current standard, published November 1996. As the conformance document for the MIME suite, it remains the reference for what constitutes a compliant MIME implementation and has not been superseded.

Conformance requirements

RFC 2049 completes the MIME series (RFC 2045-2048) by specifying what a conforming MIME implementation must do. It defines three conformance levels: a conforming user agent (email client) must generate valid MIME, correctly parse and display messages from other MIME implementations, and handle edge cases like unknown content types (by presenting them as octet-stream) and unknown transfer encodings (by preserving the raw content). A conforming gateway (translating between mail systems) has additional requirements for preserving MIME structure across transformations.

The reference examples

The value of RFC 2049 for implementers is its collection of complete example messages: a plain text message, a multipart/mixed with attachments, a multipart/alternative with text and HTML, and edge cases like nested multiparts and encoded-word usage. These examples serve as a conformance test suite. Any new MIME parser should be able to correctly handle every example in RFC 2049 section 5; failing on any of them indicates a specification-level bug rather than an edge case.

Interoperability lessons

RFC 2049 codified rules that had emerged from 1992-1996 interoperability testing between early MIME implementations. Rules like “always default to text/plain if Content-Type is missing” and “preserve unknown content types with octet-stream fallback” came from real deployment problems. Even in 2026, these rules matter: an inbound email with a garbled Content-Type header should not cause the mail client to crash or reject the message; it should render as best it can. Any MIME implementation that fails on unknown or malformed types is not RFC 2049 conforming.

Quick Reference

RFC 2049 (November 1996) is the fifth and final document of the original MIME family (2045, 2046, 2047, 2048, 2049). Defines MIME conformance criteria: what a compliant MIME-aware implementation must accept, produce, and gracefully handle. Includes example messages, canonical encoding forms, and interoperability rules. The document that answers “is my parser MIME-compliant?” with test vectors and edge cases.

RFC 2049 at a glance

AspectDetail
PurposeConformance criteria and canonical examples for MIME implementations
Companion RFCs2045 headers, 2046 media types, 2047 encoded-word, 2048 registration
Test vectorsCanonical example messages demonstrating multipart, encoded-word, quoted-printable, base64
Conformance levelsSend, receive, and gateway compliance defined separately
PublishedNovember 1996

Conformance requirements

RequirementSending MUAReceiving MUA
MIME-Version: 1.0 headerMUST emit for MIME messagesMUST recognize; presence indicates MIME awareness
text/plain supportMUST support as defaultMUST render
US-ASCII charsetMUST supportMUST render
Base64 and quoted-printable encodingSHOULD emit when neededMUST decode
Multipart typesSHOULD support for outboundMUST parse structure; render each part per its type
Unknown Content-TypeN/ASHOULD offer save-to-file or fall back to application/octet-stream handling
Malformed messagesN/A (do not emit)SHOULD render best effort; MUST NOT crash

Graceful handling of unknown or malformed types

RFC 2049 requires graceful degradation. A MIME implementation encountering an unknown Content-Type must not crash or reject the entire message. Instead, treat unknown types as application/octet-stream (offer to save the part to disk), continue processing remaining parts, and render whatever the client can. This principle is why users can open a message with a strange attachment type; the mail client saves it rather than failing entirely.

Canonical form for signing

Canonical encoding matters for DKIM. RFC 2049 defines what a MIME message looks like in canonical form: CRLF line endings, proper Content-Transfer-Encoding application, no trailing whitespace on lines. When DKIM signs a message, it typically canonicalizes headers and body before signing so that trivial transit modifications do not break the signature. RFC 2049 canonical form is the reference for what “the same message in a normalized form” means.

Common MIME conformance failures

Crashing on unknown Content-Type. A parser that rejects a message when it encounters Content-Type: application/x-unusual-format is not RFC 2049 conforming. Unknown types should fall back to application/octet-stream handling (offer to save as file); rendering the message body continues with whatever parts the parser understands.
Not emitting MIME-Version. Messages that use MIME features but lack MIME-Version: 1.0 may be misinterpreted by receivers. RFC 2049 requires the header for any MIME-formatted message. Emit it in every message you generate.
Silently dropping malformed parts. A robust parser should render what it can and log the malformed part rather than silently dropping it or crashing. Users benefit from seeing “attachment could not be rendered” rather than an incomplete message with no explanation.
Ignoring canonical form when signing. DKIM signing depends on canonical form. If the signer’s canonicalization diverges from RFC 2049 conventions (extra whitespace, different line endings), signatures fail at verification. Use a well-tested MIME library that produces canonical output before signing.
Not supporting the “must be supported” base types. RFC 2049 requires text/plain and US-ASCII as universal baselines. Some minimal MIME implementations (custom parsers in embedded systems) skip this. If your parser cannot render plain text with ASCII, it is not conforming.
MIME family RFCs
MIME in the broader email context
SMTPedia companion guides

Frequently asked questions

How do I test if my MIME implementation is RFC 2049 conforming?

Feed it the canonical example messages from RFC 2049 section 5. These include multipart nested structures, encoded-word headers, base64 and quoted-printable bodies, unknown Content-Types, and edge cases like empty parts. A conforming implementation should render each example correctly, or fall back gracefully when a type is unknown. Real-world testing: send messages through your parser from Gmail, Outlook, Apple Mail, and Thunderbird outputs; any parser that crashes on any of these is not sufficiently robust.

What is the difference between “should” and “must” in RFC 2049?

MUST (or REQUIRED) means non-negotiable for conformance. SHOULD means recommended, with allowed exceptions when there is good reason. RFC 2049 marks core requirements (MIME-Version header, base64/quoted-printable decoding, text/plain support) as MUST. Enhancements and edge cases are SHOULD. Test your implementation against MUST requirements first; violations there prevent interoperability. SHOULD violations may reduce robustness but not correctness.

Do modern email libraries automatically implement RFC 2049 conformance?

Well-maintained libraries (Python’s email module, JavaMail, Node’s mailparser, Go’s mime/multipart) are generally conformant. Custom or minimal implementations are frequently not, particularly around canonical form for signing and graceful handling of unknown types. If you build a parser yourself, budget for compliance testing; if you use a library, verify its RFC 2049 conformance is documented.

Why does canonical form matter for DKIM?

DKIM signs a hash of message content. If the content is not in canonical form (extra whitespace, different line endings, non-normalized headers), the signature covers one representation while the verifier sees a different representation, and verification fails. RFC 2049 canonical form (CRLF line endings, proper encoding declaration, no trailing whitespace) is the baseline. DKIM’s own canonicalization modes (simple, relaxed) sit on top of this baseline.

Is there a successor to RFC 2049?

Not for conformance criteria specifically. RFC 2049 remains the reference. Individual MIME extensions (SMTPUTF8, format=flowed, RFC 2231 parameter escaping) have their own conformance considerations, but the core RFC 2049 framework continues. When implementing MIME support, RFC 2049 is the document to test against, alongside its companions.


About the Author

Alaa - SMTPedia author

Alaa · LinkedIn

Email infrastructure specialist with 8+ years of hands-on experience in SMTP, deliverability, and email verification. I’ve configured and troubleshot mail systems across Postfix, Exchange, and cloud relays, managed IP reputation and warmup campaigns, and built verification pipelines processing millions of addresses. My work spans DNS authentication (SPF, DKIM, DMARC, BIMI), bounce handling, blocklist monitoring, and compliance frameworks including CAN-SPAM and GDPR. I write every article on SMTPedia to give email professionals, developers, and marketers the accurate, RFC-grounded reference they need.


About SMTPedia

SMTPedia is an independent email industry reference covering SMTP, IMAP, POP3, email deliverability, marketing platforms, DNS authentication, and email verification. Every article is researched from official provider documentation, IETF RFCs, and industry best practices. Settings and configurations are verified quarterly.

We are cited as a source by ChatGPT, Microsoft Copilot, and thousands of email professionals worldwide. Learn more about our editorial process.