June 28, 2016

Dial Ed for MSO

detective

If you’ve been working with email for a while, you probably know that Microsoft’s Outlook clients allow you to use MSO conditional code to feed Outlook-specific tables and styles to the client. What you might not know is that Outlook also has a host of mso- prefixed style properties available to email designers that can be used to fix bugs and style content in these troublesome clients.

Unfortunately for email designers, those prefixed properties are poorly documented. And by that I mean it’s a complete fucking joke of non-existence. So actually using those properties is extremely difficult. There are a few that are in common use, like mso-line-height-rule, but for anything out of the ordinary, we don’t have any documentation to know how the hell to properly use them.

I recently had the need to try to find some documentation, and here’s what happened…

The Search for Anything

The first thing I did was spend an inordinate amount of time searching for documentation. I trolled Google, Stack Overflow, and MSDN for anything I could, without much luck. Sure, there was the occasional forum post that clarified individual properties, but nothing to extensively document the ins-and-outs of everything.

Apart from the usual suspects, it seems that nobody had any solid information or links to official documentation on the subject. At some point, though, I came across this page, which seemed to be exactly what I was looking for.

Unfortunately, the documentation was wrapped up as a Windows executable. Being on a Mac, that wasn’t going to be opened anytime soon.

Fortunately, some of our engineers use Windows machines, so I enlisted their help.

Microsoft Being Microsoft

I slacked Ed and asked him to download the file to see what happened. In true Microsoft fashion, Ed reported that he was having problems with the download:

slack conversation

I tried downloading it without issues, and uploaded it to Slack, only to realize that the hosted .exe file was actually just a bit of HTML saying that the file couldn’t be found:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>404 - File or directory not found.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF; background-color:#555555;}
content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
  <div class="content-container"><fieldset>
    <h2>404 - File or directory not found.</h2>
    <h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3>
  </fieldset></div>
</div>
</body>
</html>

Leave it to Microsoft to have a garbage HTML message wrapped up as a program for a documentation link. And we wonder why they have trouble building a decent rendering engine…

I thought I was at the end of the road, until I remembered one of the internet’s most useful tools.

Going Way Back

Have you ever played around with the Internet Archive? It’s massively fun, allowing you to check out snapshots of how some of your favorite websites looked days, months, and, in this case, years ago.

I thought to myself:

If the docs aren’t here now, surely they must have been at some point, right?

The easiest way to check was trolling through Archive.org’s history for that page. After checking out a few recent entries without luck, I went as early as possible: September 19, 2008.

Without much hope, I downloaded the .exe from the page, opened it up in TextEdit, and saw gobbledygook. Not HTML, but gobbledygook! And instead of being around 1kb in size, this one was a whopping 717kb. Surely, it had to contain something!

Ed to the Rescue

I messaged Ed again, this time telling him I had an actual .exe file on my hands. Would he mind opening it up? Naturally, this conversation followed:

slack conversation

Ed, braver than most, popped it open to find that it contained a .chm file, which is just compiled HTML used for documentation. It finally looks like we found what’s been missing for so long. He kindly converted it to PDF and sent it over.

The PDF is a beast, clocking in at 3.2mb and 1,338 pages. And no table of contents. But, it looked like honest-to-god documentation. Finally.

Fortunately, we still had the .chm file and it turns out that every platform has a bunch of .chm viewers, including OS X. After downloading CHM Reader for Mac, I popped it open and sat in awe of the glory of having proper documentation available for Outlook.

documentation screenshot

Here You Go

While the file is cumbersome to go through, it’s a massive improvement over the complete lack of documentation previously available to email designers. I thought about trying to put it up online somewhere as well-structured HTML so that others can dig through it, but that’s more time-consuming than I’d like.

Instead, I’ll host the .chm file and PDF right here for anyone that wants to take a peak. Using this kind of stuff is pretty archaic, but for those weird bugs, those frustrating edge cases, and for those brave souls of the email industry, here you go:

Download the Microsoft Office HTML and XML Reference PDF

Download the Microsoft Office HTML and XML .chm file