eHow launches Android app: Get the best of eHow on the go.

How To

How to Decode an Email in MIME Format

Member
By SNorman
User-Submitted Article
(28 Ratings)

Most emails sent today are MIME (Multipupose Internet Mail Extensions) formatted. This allows emails to be sent with plain text and rich text/HTML versions, inline images, and attachments. MIME extensions can be added to a message in standard RFC/822 format so backward compatibility is achieved with older mail systems.

Difficulty: Challenging
Instructions

Things You'll Need:

  • Knowledge of a computer language (i.e. C++, C#, VB, etc).
  • Basic knowledge of the format of an RFC/822 formatted email message.
  1. Step 1

    Load the contents of the email message.

  2. Step 2

    Check the "Content-Type" header. If the content type is multipart (i.e. "multipart/mixed", "multipart/alternative", etc) the message will have multiple sections to parse. If the content type is multipart, continue with below steps.

  3. Step 3

    The Content-Type header should contain a unique string used by the code that generated the MIME message to designate MIME part boundaries. Example:

    Content-Type: multipart/mixed;
    boundary="part_c7161025_fe8a_45f4_83ef_6befcfa5d021"

    The boundary string in this case is "part_c7161025_fe8a_45f4_83ef_6befcfa5d021".

  4. Step 4

    Each MIME part will be separated by the boundary string preceeded by two dashes ("--") on a blank line. You will need to scan the message line by line looking for the part boundaries. All text in between the boundaries *except the final CR/LF* is part of that MIME part.

    Important: The last MIME part will end with the boundary string followed by two more dashes.

    Example:

    --part_c7161025_fe8a_45f4_83ef_6befcfa5d021
    First MIME part.

    --part_c7161025_fe8a_45f4_83ef_6befcfa5d021
    Second MIME part

    --part_c7161025_fe8a_45f4_83ef_6befcfa5d021
    Last MIME part.

    --part_c7161025_fe8a_45f4_83ef_6befcfa5d021--

  5. Step 5

    Each MIME part then needs to be parsed. The format of each MIME part is similar to the original RFC/822 formatted message. It will contain a series of headers, followed by a blank line, then the body data.

  6. Step 6

    A MIME part can itself be multipart, with its own "Content-Type" header and boundary string. Your code must recursively parse MIME parts until it reaches the child nodes.

  7. Step 7

    A MIME part can simply be a binary attachment. In this case a Filename header will usually be supplied, along with the transfer encoding. BASE64 is a popular encoding type. In this case the entire MIME part body must be BASE64 decoded. As an example here are the first few lines of an attached JPG image:

    ------_=_NextPart_003_01C755EF.43F2628D
    Content-Type: image/jpeg;
    name="testimage.jpg"
    Content-Transfer-Encoding: base64
    Content-Description: testimage.jpg
    Content-Disposition: attachment;
    filename="testimage.jpg"

    /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
    HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
    MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAQABQQDASIA
    AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA

  8. Step 8

    The HTML body of the message should be in a MIME section with ContentType: Text/Html, inside a ContentType: Multipart/Alternative MIME section.

  9. Step 9

    The plaintext body of the message should be in a MIME section with ContentType: Text/plain, inside a ContentType: Multipart/Alternative MIME section.

Tips & Warnings
  • Consult RFC 822 http://www.ietf.org/rfc/rfc0822.txt?number=822 and RFC 1341 http://www.ietf.org/rfc/rfc1341.txt?number=1341 for more information.
  • If you are coding in C#, an excellent free library is available at http://www.codeproject.com/csharp/mime_project.asp.

Post a Comment

Post a Comment
  • Have you done this? Click here to let us know.
I Did This

Related Ads

Internet
Virginia DeBolt,

Meet Virginia DeBolt eHow's Internet Expert.

Get Free Internet Newsletters

Copyright © 1999-2009 eHow, Inc. Use of this web site constitutes acceptance of the eHow Terms of Use and Privacy Policy.   en-US Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

Demand Media
eHow_eHow Technology and Electronics