leah blogs

May 2004

27may2004 · A proposal for HTML mails

HTML mails have been pissing off people since they were introduced. The additional clutter and bloat soon were criticized. Today, most mail I recieve is still plain text, but most spam is HTML.

Nevertheless, the concept isn’t that bad at all: Users don’t want to write plain text, but markup their text with emphasis, add links, define paragraphs etc.

Therefore, the content-type text/enriched was defined in RFC 1896. It failed; being a kind of SGML dialect with nonstandard semantics, it’s too complicated for most mail clients to implement. In fact, the only text/enriched document I’ve ever seen was the sample file enriched.doc included in the Emacs distribution.

I have some ideas to help users get their markup, but make users (or are these “professionals” now?) for text clients still being able to read the mails without the need of a browser.

First, all markedup mails get created as restricted XHTML. Basically, only these modules are needed:

  • Text module: abbr, acronym, address, blockquote, br, cite, code, dfn, div, em, h1, h2, h3, h4, h5, h6, kbd, p, pre, q, samp, span, strong, var.

  • Hypertext module: a

  • List module: dl, dt, dd, ol, ul, li

  • Edit module: del, ins

  • Bidirectional text module: bdo

  • Table module: caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr

  • Image module: img

This is a small, document-centric subset of XHTML, but enough for mail. Note that the “Style sheet module” is missing: CSS is problematic in mail, and not needed for the purpose of markup. Instead, each user should define his own stylesheet (or use a predefined one).

Just using XHTML doesn’t help against the problem of text client users, though. (Although I think they’d already be happy if the mails didn’t use crappy HTML3.2, but valid XHTML.)

Therefore, the mail gets updated in a textual format, for example Markdown or Textile. An example; this mail as the user wants it:

Hello John,

I have some new data for you; it’s very important to me that you evaluate it soon:

Date Size
05-01-2004 17.1cm
05-16-2004 18.4cm
06-01-2004 19.8cm

Isn’t that great?

Yours,
J. Random User


J. Random User
42 Foo Street
Pittsburgh, PA 15213

This is the according XHTML snippet:

<div>
<p>Hello John,</p>
<p>I have some new data for you; it's
<strong>very important</strong> to me that
you evaluate it soon:</p>
<table>
  <thead><tr><th>Date</th>  <th>Size</th></tr></thead>
  <tbody>
    <tr><td>05-01-2004</td> <td>17.1cm</td></tr>
    <tr><td>05-16-2004</td> <td>18.4cm</td></tr>
    <tr><td>06-01-2004</td> <td>19.8cm</td></tr>
  </tbody>
</table>
<p>Isn't that great?</p>
<p>Yours,<br />J. Random User</p>
<hr />
<address>
<a href="mailto:jranduser@example.org">J. Random User</a><br />
42 Foo Street<br />
Pittsburgh, PA 15213</address>
</div>

Can you see the clutter? :-). However, in Textile, it would only look like this:

Hello John,

I have some new data for you; it's *very important* to 
that you evaluate it soon:

|_. Date     |_. Size |
| 05-01-2004 | 17.1cm |
| 05-16-2004 | 18.4cm |
| 06-01-2004 | 19.8cm |

Isn't that great?

Yours,
J. Random User

<hr /><address>"J. Random User":mailto:jranduser@example.org
42 Foo Street
Pittsburgh, PA 15213
</address>

Definitely an improvement, no? And it’s readable by anyone.

So the way future markup-mail should work is:

Markup -> restricted XHTML -> Textile/Markdown

On the reader site, it’s of course just the reverse.

The only problem for now is the automatic conversion of XHTML to Textile. (And the need of a WYSIWYG XHTML widget; the Mozilla Compos(t)er code I just tried sucks hard.)

NP: Smog—No Dancing

Copyright © 2004–2022