How to Decode an Email in MIME Format

Techwalla may earn compensation through affiliate links in this story. Learn more about our affiliate and product review process here.

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.

Advertisement

Step 1

Load the contents of the email message.

Video of the Day

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.

Advertisement

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"

Advertisement

The boundary string in this case is "part_c7161025_fe8a_45f4_83ef_6befcfa5d021".

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.

Advertisement

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

Advertisement

Example:

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 First MIME part.

Advertisement

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Second MIME part

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021 Last MIME part.

--part_c7161025_fe8a_45f4_83ef_6befcfa5d021--

Advertisement

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.

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.

Advertisement

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:

Advertisement

Advertisement

------=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

Advertisement

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.

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.

Video of the Day

Advertisement

Advertisement