File formats

How HTML Email Works And Why It Looks Different

Marketing email is built with tables and inline styles because that is the only construction that survives every client.

6 min read

HTML email is formatted mail. It is not a web page. An HTML email is not a web page and usually it is not one message either. Most formatted mail carries the same content twice, once as plain text and once as HTML, with the receiving program choosing which to show you. Almost everything strange about how mail looks comes from that arrangement.

It matters here because a conversion has to pick one of them. A printed or exported copy keeps only what the tool decided to render.

An HTML Email Is the Same Message Written Twice

MIME has a container for exactly this. It is why a simple looking message has structure inside it.

Content-Type: multipart/alternative; boundary="alt-9c2"

--alt-9c2
Content-Type: text/plain; charset=utf-8

  Your order has shipped. Track it at example.net/t/8891

--alt-9c2
Content-Type: text/html; charset=utf-8

  <p>Your order has shipped.
     <a href="...">Track your parcel</a></p>

--alt-9c2--

The word alternative is the instruction. These are versions of one message rather than two parts of it. The client shows whichever it prefers, usually the last one it understands.

The plain part is not a fallback nobody sees. Screen readers use it. So do watch notifications, preview lines, search indexes and spam filters. Send an empty plain part and it still displays correctly for most people, while reading as evasive to a filter. That is a common reason legitimate mail scores badly.

Why HTML Email Looks Different Everywhere

A browser has one job and mail clients have never agreed on theirs.

What a Browser Does

  • Follows one set of standards
  • Loads stylesheets and scripts
  • Modern layout, reliably
  • Behaves the same across pages

What a Mail Client Does

  • Uses whatever engine it was built on
  • Strips scripts, often strips stylesheets
  • Supports a narrow subset of layout
  • Differs by client and by version
No client is wrong here. Each renders what it supports and ignores the rest, so one message honestly produces several different pages.

Outlook on the desktop is the famous case. For years it rendered HTML through the engine from Word rather than a web engine, which handles a much narrower range of layout and styling. Newer versions have moved away from that, so what somebody sees depends on which version they are running rather than on the message.

This is why marketing email is built with tables and inline styles and looks like it was made twenty years ago. That is not neglect. It is the only construction that survives every client, chosen deliberately and repeatedly by people who would rather not.

Where the Images in an HTML Email Actually Are

An image in a message is in one of two places and the difference decides whether it appears offline.

Linked

Fetched when you open it
<img src="https://
  example.net/i/9c2.png">

not in the message
requested from a server
  at the moment you look

Keeps the message small. Also tells the sender you opened it, which is why clients block these by default.

Embedded

Carried inside
<img src="cid:logo9c2">

Content-ID: <logo9c2>
  the image travels
  as a part of the
  message itself

Works offline and forever. Makes the message larger too, since the encoding adds about a third.

A signature logo is usually embedded. A newsletter banner is almost always linked. The reason is measurement rather than file size.

A tracking pixel is a linked image doing nothing else. One transparent dot, invisible in the message, existing only to be requested. The request reports that you opened it, roughly when and roughly where from. Blocking remote images is what stops it. That is the whole reason the prompt appears.

What This Means for a Stored HTML Email

Both bodies and both kinds of image are in the file, which has consequences once a message is being kept rather than read.

Kept asWhat you end up with
EML or MBOXBoth versions, embedded images, linked ones as addresses
PST or MSGThe same, in a different container
PDF or a printoutOne rendering, embedded images only
A CSV exportOne version, usually plain. No images
MHTOne rendering with its images gathered in

Linked images stop working when the server does. An archive of newsletters from 2015 is a set of messages full of addresses that answer nothing. The text survived and the pictures were never in the file, which is worth knowing before treating a mail archive as a complete record of what people saw.

Read next What a Conversion Loses And Why It Is Not a Fault What happens to both bodies when a message is moved somewhere else.

Reading What an HTML Email Actually Sent

  1. View the source rather than the message. Every client offers it somewhere. The boundaries and the Content-Type lines show you both versions at once.
  2. Read the plain part first. It is the version with no styling and no images, which makes it the clearest statement of what the message says.
  3. Look for cid references in the HTML. Those images are inside the file. Anything with a full web address is not. It never has been.
  4. Notice single pixel images. A one by one image with no visible purpose is a measurement rather than a picture.
  5. Compare the two versions where something looks off. A link that reads differently in each is worth a second look. It is one of the oldest tricks in phishing.

That last check is quick and it works. The plain part usually shows the actual address while the HTML shows friendly text over it. Where the two disagree about where a link goes, the plain part is the one that cannot hide anything.

Where a stored message needs reading rather than displaying, seeing both bodies side by side answers more than opening it in a client does. Our EML viewer lays out the parts as parts, including which images travelled with the message and which were only ever addresses.

Structure checked against RFC 2046 and rendering behaviour against vendor documentation in August 2026. Client behaviour changes between versions, so treat any named program as an example rather than a fixed rule.

Questions People Ask

7 questions, answered in full below.

Why does the same email look different in every program?

Because mail clients use unrelated rendering engines and none of them is a browser. Each supports a different subset of what HTML can express, so the same message is legitimately displayed differently rather than one of them being wrong.

Why are images blocked until I click something?

Because fetching a remote image reports back to whoever sent it, along with roughly where and when. Blocking by default removes that signal, which is why the prompt exists and why it opens set to no.

What is a tracking pixel?

A tiny image, often a single transparent dot, that exists only to be requested. Loading it reports the open. Nothing about it shows in the message. Switching off remote images is what defeats it.

Is the plain text version still used?

Yes, more than people assume. Screen readers, smart watches, notification previews, indexing and filtering all read it. Leave that part blank and most people see nothing wrong, while a spam filter treats the gap as a signal.

Why does Outlook display things so differently?

For years the desktop version borrowed the rendering engine out of Word instead of using a web engine. That engine handles far less of what modern HTML can express. Newer versions have moved on, so behaviour depends on which one somebody is running.

Does converting a message keep both versions?

Between mail formats yes, because both parts are in the message. Converting to a document or a printed page keeps whichever the tool chose to render. The other is gone with no note that it existed.

Can I make HTML email look the same everywhere?

Not exactly the same. Keeping the layout simple and the styling inline gets close, which is why marketing email looks like it was built in 2005. That is not laziness. It is the only approach that survives every client.

Sources

Where the figures and behaviour described above were checked.

  1. HTML email Wikipedia
  2. Web beacon Wikipedia
  3. MIME Part Two, Media Types IETF, RFC 2046