Just adding your two cents to this discussion after testing various iterations of this yourself over the past few days. Other answers to this question are good for starters, but they all miss a couple of cases with edges (or sometimes not so often). I'm not going to claim that I tested this on every single client, but I worked on all the major ones: Gmail, Yahoo, Outlook.com/Hotmail, Outlook for Windows and OS X (various versions connecting to Exchange, POP and IMAP), various IMAP Internet clients, iOS Mail (both for connecting to the exchange server and to the regular IMAP server: Yes, it does previews differently in these circumstances), Android Mail, Android / iOS Gmail, Postbox, Thunderbird and a few others that I can’t remember from head to head.
Use the div preheader. Set up your inline div because some webmail services (Gmail) remove <style> tags from the HTML header of your email. Built-in display: none; style display: none; works on most clients, but does not appear in the gmail web view and in the Yahoo web browser unless you define it as display: none !important; . If you do not have a !important declaration there, the preheader div will be displayed in the body of the message when reading it in web clients for these services.
We are currently using a div with the following style-built styles to hide our preheader from the various clients and services that we tested: display: none !important; height:0px; overflow:hidden; color:#ffffff; font-size:2pt; display: none !important; height:0px; overflow:hidden; color:#ffffff; font-size:2pt; . Some of them do not work in all or in most situations, but between them they all pretty well cover various bases. Hacking height , in particular, affects only a few clients and breaks completely in the Gmail web client (it is currently rewriting height declarations as the minimum height, which was unexpected), but since it honors display: none !important; , the preheader header there is still hidden. The color and font size of the hack, as ste7enm mentioned, more effectively hide the preheader when a message is forwarded by some clients / services.
Side note: after testing, re-designing and re-testing our templates several times, I came to the conclusion that email is the arch-enemy of all things, good and clean.
source share