Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MIME type to satisfy HTML, email, images and plain text?

Tags:

The answer to Mail multipart/alternative vs multipart/mixed suggests that attachments should be peers of the multipart/alternative message, like:

  • multipart/mixed
    • multipart/alternative
      • text/plain
      • text/html
    • some/thing (disposition: attachment)
    • some/thing (disposition: attachment)
    • ...

I'd like to send email with an html part with some inline images and a plain text alternative. What is the preferred MIME layout for the various parts? A couple of options appear in example code and in other questions, but which have worked best in practice? My inclination is this:

  • multipart/alternative
    • text/plain
    • multipart/related
      • text/html (referencing the images by cid)
      • image/gif
      • image/gif
      • ...

That way, the images are clearly for the purpose of rendering the html part. A full example of this would be:

From: Rich Example <[email protected]> To: A Recipient <[email protected]> Subject: An example of email with images and a plain alternative MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="outer-boundary"  This is a MIME-encoded message. If you are seeing this, your mail reader is old. --outer-boundary Content-Type: text/plain; charset=us-ascii  This message might make you :) or it might make you :(  --outer-boundary MIME-Version: 1.0 Content-Type: multipart/related;   type="text/html"; start="<body@here>"; boundary="inner-boundary"  --inner-boundary Content-Type: text/html; charset=us-ascii Content-Disposition: inline Content-ID: <body@here>  <html>  <body>   This message might make you   <img src="cid:smile@here" alt="smile">   or it might make you   <img src="cid:frown@here" alt="frown">  </body> </html>  --inner-boundary Content-Type: image/gif Content-Disposition: inline Content-Transfer-Encoding: base64 Content-ID: <smile@here>  R0lGODlhEAAQAKEBAAAAAP//AP//AP//ACH5BAEKAAIALAAAAAAQABAAAAIzlA2px6IBw2 IpWglOvTahDgGdI0ZlGW5meKlci6JrasrqkypxJr8S0oNpgqkGLtcY6hoFADs=  --inner-boundary Content-Type: image/gif Content-Disposition: inline Content-Transfer-Encoding: base64 Content-ID: <frown@here>  R0lGODlhEAAQAKEBAAAAAAD//wD//wD//yH5BAEKAAIALAAAAAAQABAAAAIzlA2px6IBw2 IpWglOvTahDgGdI0ZlGW5meKlci75drDzm5uLZyZ1I3Mv8ZB5Krtgg1RoFADs=  --inner-boundary--  --outer-boundary-- 
like image 323
Rob Starling Avatar asked May 17 '12 07:05

Rob Starling


People also ask

What is the MIME type of a plain text?

Two primary MIME types are important for the role of default types: text/plain is the default value for textual files. A textual file should be human-readable and must not contain binary data. application/octet-stream is the default value for all other cases.

What is MIME type of HTML file?

A MIME type (or media type) is an identifier for file formats or format contents on the Internet. MIME stands for Multipurpose Internet Mail Extensions and all MIME types are officially maintained by the Internet Assigned Numbers Authority (IANA).

How do I insert plain text into an HTML email?

I don't know how are you sending email from HTML, but all you have to do is to set header to Content-Type: text/plain;" instead of Content-Type: text/html;" . Then your email content will be sent as plain text without any parsing.

Where do I put MIME type in HTML?

Look for a <meta> element in the page source that gives the MIME type, for example <meta http-equiv="Content-Type" content="text/html"> .


1 Answers

You are right. Inline images should be stored in a multipart/related mime-entity (RFC 2387) and offering multiple content-type options can be done with multipart/alternative (RFC 2046).
For adding attachments you may put the whole structure into a multipart/mixed and add the attachments.

  • multipart/mixed
    • multipart/alternative
      • text/plain
      • multipart/related
        • text/html
        • image/gif
        • image/gif
    • some/thing (disposition: attachment)
    • some/thing (disposition: attachment)

You can also use inline image in text/plain messages, but not all MUA support this. (Use none or disposition: inline)

  • multipart/mixed
    • text/plain (text above image)
    • image/gif
    • text/plain (text below image)

And I dont't know a clean way to combine this with a multipart/alternative HTML-email.

like image 185
Hägar Avatar answered Oct 26 '22 22:10

Hägar