From Gmail's and Outlook.com's redesigns to amp4email, here's everything that happened in the last year or so in the world of email clients. Discover the latest possibilities, but also quirks and bugs, and reflect on how we can all help email move forward.
2. Rémi Parmentier
@HTeuMeuLeu
emails.hteumeuleu.com
Hello everyone ! My name is Rémi Parmentier. I am a french front-end developer. I usually write on the web under the
nickname HTeuMeuLeu, which is french slang for HTML. I really get a kick at understanding why and how things work in the
email world and sharing my findings afterwards. I've even been nicknamed « The Email Detective » by other email geeks.
3. A few weeks ago I was surfing on Reddit and found a post about something related to email code. And I made the mistake
of reading the comments and it was full of really vehement comments like « HTML in email is at least a decade behind » or
« HTML emails suck on a fundamental level since they are time-locked in 2001 ».
!
It's weird that emails are so widely use for personal or professional use, yet some people still have the impression it's stuck
in the past.
!
https://www.reddit.com/r/webdev/comments/9g2akx/googles_plan_to_transform_email_to_amp_is_deeply/?
utm_content=comments&utm_medium=user&utm_source=reddit&utm_name=u_McPoulet
4. A few weeks ago I was surfing on Reddit and found a post about something related to email code. And I made the mistake
of reading the comments and it was full of really vehement comments like « HTML in email is at least a decade behind » or
« HTML emails suck on a fundamental level since they are time-locked in 2001 ».
!
It's weird that emails are so widely use for personal or professional use, yet some people still have the impression it's stuck
in the past.
!
https://www.reddit.com/r/webdev/comments/9g2akx/googles_plan_to_transform_email_to_amp_is_deeply/?
utm_content=comments&utm_medium=user&utm_source=reddit&utm_name=u_McPoulet
5. Email is not
stuck in 2001.
You are.
A lot of things happened in the past ten years. And it feels like even more things happened in this past year alone.
8. 201620142012201020082006
MY FIRST
EMAIL
2018
In 2006 I landed my first job at a web agency. And at that time, HTML emails weren't considered a bad thing. IE6 was the
most dominant browser. We were still coding websites mostly using tables.
11. GMAIL
PUBLIC BETA
201620142012201020082006
FIRST
iPHONE
MY FIRST
EMAIL
2018
RESPONSIVE
WEB DESIGN
But it wasn't until 2010 that we started talking about responsive web design. It was an article by Ethan Marcotte published
on A List Apart that explained how we could this thing in CSS called media queries to target browser widths and adapt our
layouts accordingly. Before that, between 2007 and 2010, we would mostly make separate mobile websites.
12. GMAIL
PUBLIC BETA
201620142012201020082006
FIRST
iPHONE
MY FIRST
EMAIL
2018
RESPONSIVE
WEB DESIGN
SAW A FIRST
RESPONSIVE
EMAIL
And it wasn't before 2012 that I realized that emails could also be responsive. I still remember that moment when I received
a Twitter notification email, and saw a completlely different layout between my desktop Gmail and Apple Mail on my
iPhone.
15. Outlook.com
2015 redesign
In 2015, Outlook.com moved to the Office365 architecture and webmail. And sadly it was a huge step backwards in terms
of HTML and CSS support. Outlook.com, before 2015, used to support CSS animation, box-shadow. This new version no
longer did. But at least it got rid of two bugs.
32. Yahoo
responsive support
In 2015, Yahoo got responsive support. And the reason they didn't before was because of a bug in their CSS parser. And
this is a bug that led us developers to use a special hack.
52. There are two hard things in
Computer Science:
cache invalidation
and naming things.
“
— Phil Karlton ”
There's this quote that I love that says […] I would definitely add a third one.
53. There are three hard things in
Computer Science:
cache invalidation
and naming things
and responsive emails.
“
”
54. It's hard
to code responsive emails.
It's hard to code responsive emails because you need to deal with bad email clients like Outlook 2016, who uses Word's
rendering engine to display HTML emails, and more modern but very restrictive webmails like Gmail, which didn't support
media queries at the time.
56. But I always had one problem with this. It's that once your columns stack below each others on mobile, they stay at their original
size.
57. And what I'd want in most cases is for these columns to grow.
58. without media queries?
How can we make a column grow on mobile
So this is how I went on a quest to find how can we make a column grow on mobile without media queries.
59. F L E X B O X
And if you've been doing web development in the past few years, the first thing that should come to your mind is Flexbox.
60. Flexbox is amazing to create fluid layouts like this one, where each image can grow and shrink and pass on a new line when
there's no longer enough room.
61. .grid {
display: flex;
flex-wrap: wrap;
flex-direction: row;
}
!
.grid > * {
flex: 1 1 auto;
}
And the only CSS you need to create such an evoluted layout is those four lines. Your apply display:flex on your parent
element, set the elements to wrap on a new line.
62. .grid {
display: flex;
}
But unfortunately, if you try this on Gmail, even today, Gmail will only keep the first property. And unfortunately, when you
only apply display:flex to an element, it means you'll inherit from the default flexbox values.
63. And so this is what my image gallery with flexbox looks like in Gmail.
71. .hero {
background: radial-gradient(
circle at 30% 107%,
#fdf497 0%, #fdf497 5%, #fd5949 45%,
#d6249f 60%, #285aeb 90%
);
}
Which means we can also support CSS functions like radial-gradient, to make things like this.
73. .column {
width: calc(100% - 50px);
}
And so Gmail supports calc(). And this is interesting because calc allows for calculations and potentially dynamic layouts.
76. font-size: calc( 12px + (24 - 12) * ( (100vw -
400px) / ( 800 - 400) ));
He used a very complicated calculation using viewport units. But he still needed media queries to prevent the element to
become too small or too big depending on your browser's width.
86. The Fab Four Technique
Illustrations by Elias Stein : https://dribbble.com/shots/2012203-Paul-George
[…] And I called this for two reasons.
87. First because I found this in january 2016. And at that time, the Beatles catalogue had just gone up on spotify, so I listened a lot to
the beatles.
88. There are three hard things in
Computer Science:
cache invalidation
and naming things
and responsive emails.
“
”
And second it's because it's hard to name things.
90. What we're going to do is build a layout like this where we've got four columns up until a certain breakpoint, where we'll
go to
91. max-‐width:100%;
min-‐width:25%;
width:calc((480px -‐ 100%) * 480);
Above breakpoint width
Below breakpoint width
Breakpoint
Here's what the fab four looks like.
1. Max-width définit la largeur mobile
2. min-width définit la largeur desktop
3. width exécute le calcul nécessaire avec le point de rupture souhaité
113. <div style="display:inline-‐block;
min-‐width:120px;
width:25%;
max-‐width:100%;
min-‐width:-‐webkit-‐calc(25%);
min-‐width:calc(25%);
width:-‐webkit-‐calc(480px * 480 -‐ 100% * 480);
width:calc(480px * 480 -‐ 100% * 480);">
…
</div>
Outlook.com would remove the entire style attribute if you'd have certain characters in your styles, like the star *.
117. <div style="display:inline-‐block;
min-‐width:120px;
width:25%;
max-‐width:100%;
min-‐width:-‐webkit-‐calc(25%);
min-‐width:calc(25%);
width:-‐webkit-‐calc(230400px -‐ 48000%);
width:calc(230400px -‐ 48000%);">
…
</div>
Now this way only the fab four properties are filtered.
119. And I made this in 2016, but even today in the latest Gmail version, it's really relevant. Because the Fab Four doesn't rely
on media queries, you don't base your layout on screen's width. So at the same screen width, you can have different
layouts depending on your webmail's configuration.
124. SO YOU
USE GMAIL
ON MOBILE ON DESKTOP
ANDROID WEBMAIL WITH A
GOOGLE APPS
ACCOUNT
WITH A
PUBLIC
ACCOUNT
PAYINGFOR FREEWITH A
GMAIL
ACCOUNT
WITH A
POP/IMAP
ACCOUNT
DEFAULT GMAILIFIED FOR WORK
UNLIMITED
FOR WORK
LEVEL 1 LEVEL 2 LEVEL 3
BASIC CSS CALC()
BACKGROUND
MEDIA QUERIES
<STYLE>
iOS
2015BEFORE RESPONSIVE SUPPORT
125. SO YOU
USE GMAIL
ON MOBILE ON DESKTOP
ANDROID WEBMAIL WITH A
GOOGLE APPS
ACCOUNT
WITH A
PUBLIC
ACCOUNT
PAYINGFOR FREEWITH A
GMAIL
ACCOUNT
WITH A
POP/IMAP
ACCOUNT
DEFAULT GMAILIFIED G SUITE
BUSINESS
G SUITE
BASIC
LEVEL 1 LEVEL 2 LEVEL 3
BASIC CSS CALC()
BACKGROUND
MEDIA QUERIES
<STYLE>
iOS
2016AFTER RESPONSIVE SUPPORT
126. SO YOU
USE GMAIL
ON MOBILE ON DESKTOP
ANDROID OR WEBMAIL WITH A
G SUITE or public
ACCOUNT
WITH A
GMAIL
ACCOUNT
WITH A
POP/IMAP
ACCOUNT
DEFAULT GMAILIFIED
LEVEL 1 LEVEL 2 LEVEL 3
BASIC CSS CALC()
BACKGROUND
MEDIA QUERIES
<STYLE>
iOS
2018
131. There are a few new features, like the possibility to snooze emails. But the rest is mostly just cosmetic. Though there's one
bug that they fixed.
133. There's a bug in the previous version of Gmail where if you chose to block images by default, or if by any chance Gmail
blocked your images, and you click on the display images below, it will make your styles in a style tag invalid.
136. CSS
HTML
div.m159215f7d36ee7fd p {
background:red;
}
div.m159215f7d36ee7fd .m_3567455155959655244green {
background:green;
}
<div class="m159215f7d36ee7fd">
<p class="m_3567455155959655244green">
Lorem ipsum dolor sit amet.
</p>
<img src="spacer.gif" alt="" style="display:block;" />
</div>
When Gmail receives the email, it will surround your HTML with a div with a specific class. This class is also used to prefix
the rules in the style tag.
137. CSS
HTML
div.m159215f7d36ee7fd p {
background:red;
}
div.m159215f7d36ee7fd .m_3567455155959655244green {
background:green;
}
<div class="m159215f7d36ee7fd">
<p class="m_3567455155959655244green">
Lorem ipsum dolor sit amet.
</p>
<img src="spacer.gif" alt="" style="display:block;" />
</div>
Each class name is also prefixed, both in the style tag and in the HTML.
139. But perhaps my favorite fact about this new Gmail redesign is that there's a new loading animation, and it's done just in
HTML and CSS. This is not a video, this is not an animated GIF. It's just divs transformed to make an animated drawing.
141. For the most part, it's really just a cosmetic redesign. There's no change in the underlying CSS and HTML filtering engine.
Which means that we still don't have media queries support. But somehow, they don't support media queries, but they
included some special features for International Talk Like A Pirate Day, which is in september, where you can change the
interface.
142. Folders become Treasure troves, Favorites become Loot and Mark as Read becomes mark as discovered.
143. Source :https://twitter.com/M_J_Robbins/status/979386325446119425
The new Outlook.com has a new zoom mecanism. If your email doesn't fit inside the message zone width, it will scale your
email. And while this may seem like a clever solution to prevent horizontal scroll, it's really bad for accessibility, because
everything now becomes twice as small.
147. AOL moves to Yahoo
Last year, Oath Inc, which is a Verizon subsidiary, bought Yahoo. And they already owned AOL. So this year, they started
moving AOL webmail users to Yahoo's webmail.
148. Source : https://www.emailclientmarketshare.com
13.03% in July 2018
1.4% in June 2018
And this was clearly visible in EmailClientMarketshare.com, a website ran by Litmus that shows which are the most popular
email clients.
154. "On iOS 12, built-in apps such as […] Mail can natively Quick Look usdz files of virtual objects in 3D or AR."
I wasn't really excited about this. And then iOS 12 came just a few weeks ago…
159. Microsoft gave this example of a trello email where you could directly add a comment right from within the card, or move
your content to another list in your Trello board.
160. {
"type": "AdaptiveCard",
"$schema": "https://adaptivecards.io/schemas/adaptive-‐card.json",
"version": "1.0"
}
So let's see what does an adaptive card looks like. It's a JSON file format. You need to set these three declarations to
declare the most basic card.
161. {
"type": "AdaptiveCard",
"$schema": "https://adaptivecards.io/schemas/adaptive-‐card.json",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"text": "Hello world!",
"size": "large",
"weight": "bolder"
}
]
}
And then you can add the body of your card with your actual content. And each content will be between accolades, and
set to a specific type. For example here, I use a TextBlock type to set basic text. And you can define size and weight.
There's plenty of components predefine, like ImageSet (for image galleries), ColumnSet (to build fluid column layouts),
162. {
"type": "AdaptiveCard",
"$schema": "https://adaptivecards.io/schemas/adaptive-‐card.json",
"version": "1.0",
"body": [
{
"type": "TextBlock",
"text": "Hello world!",
"size": "large",
"weight": "bolder"
}
]
}
<html>
<head>
<meta charset="utf-‐8">
<script type="application/adaptivecard+json">
!
</script>
</head>
<body>
<h1>Hello world!</h1>
And now if you want to send an email like this, all you need to do is add this JSON content into a script tag
164. And at some point during my tests, I realized that all the layout done to display a card in Outlook.com is done with
Flexbox. But Flexbox is not supported by Outlook.com in a regular HTML email. So I wondered if this could be used to
create better responsive layout, without media queries. And so I tried to recreate my earlier Fab Four example, with four
images going below each others.
169. This works well. But it doesn't make the images pass below each others. They only scale fluidly.
170. {
"type": "AdaptiveCard",
"$schema": "https://adaptivecards.io/schemas/adaptive-‐card.json",
"version": "1.0",
"body": [
{
"type": "ImageSet",
"imageSize": "large",
"images": [
]
}
]
}
So I tried to recreate this, but this time with an ImageSet component that lets you create image galleries. So you can define
your imageSize for your whole gallery.
171. {
"type": "AdaptiveCard",
"$schema": "https://adaptivecards.io/schemas/adaptive-‐card.json",
"version": "1.0",
"body": [
{
"type": "ImageSet",
"imageSize": "large",
"images": [
{
"type": "Image",
"url": "ringo.png",
"backgroundColor": "#27AAE1",
"altText": "Ringo"
}
]
}
]
And then you define each image, using the exact same component that I used before.
172. {
"type": "AdaptiveCard",
"$schema": "https://adaptivecards.io/schemas/adaptive-‐card.json",
"version": "1.0",
"body": [
{
"type": "ImageSet",
"imageSize": "large",
"images": [
{
"type": "Image",
"url": "ringo.png",
"backgroundColor": "#27AAE1",
"altText": "Ringo"
},
{
"type": "Image",
"url": "john.png",
So I did this four times, and I tested my email.
177. Source : https://www.ampproject.org/
"The AMP project is an open-source initiative aiming to make the web better for all. " In reality, it's a Google framework to
help build light webpages.
178. This first example is from Pinterest. You've an email with a typical Pinterest like layout with different recipes. And if you click
on one of them, you're brought to the full recipe page, right within your email. This is not opening another tab in your
browser, this is right straight in Gmail. And this is all with dynamic content as well.
179. Here's one more example from Booking.com. They have a list of promotions at various destinations. And you can click a
`See a new deal` button and it will show you another offer instead. And this is all done with live dynamic data. And there's
another really cool thing about this email if you scroll a bit in the footer. There's this "manage your subscriptions" button.
180. <!doctype html>
<html>
<head>
<meta charset="utf-‐8">
<style>
body { background: white; }
</style>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
So here's how you can turn a regular HTML email into an AMPHTML email. Here's a pretty common HTML email template,
with an HTML5 doctype, a meta tag, a style and an h1 tag.
181. <!doctype html>
<html 4email>
<head>
<meta charset="utf-‐8">
<style>
body { background: white; }
</style>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
⚡
First we need to add the "amp4email" attribute on the html tag. We can either write it like this, with the little emoticon.
But I hate this because as a non native english speaker, it's totally unintuitive to me that it's supposed to be pronounced
amp4email and not lightningbolt4email.
182. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style>
body { background: white; }
</style>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
So you can write it like this instead. Much more readable in my opinion, and much more consistent with the rest of
Google's code.
183. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<style>
body { background: white; }
</style>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
Then we need to import AMP itself, with both a boilerplate style tag and a script tag.
184. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<style amp-‐custom>
body { background: white; }
</style>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
And finally, you can add your own style tags using an amp-custom attribute. While there's no styles limitations here, Google
warns that email clients like Gmail will apply their own filters for security reasons.
185. Source : https://www.ampbyexample.com/playground/#runtime=amp4email
And voilà, you've got your first valid AMP HTML email. We can test this in Google's Playground, which is an online tool
where you can validate and test your AMP code. Of course, at this point, it's pretty boring and all it says is Hello World!. So
let's make it a little bit more dynamic.
186. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
</head>
<body>
<h1>
Hello world!
</h1>
</body>
</html>
So, back to our hello world example. Here's how we can create a really basic interactive email with amp4email.
187. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
</head>
<body>
<h1>
Hello world!
</h1>
<input type="text" />
</body>
</html>
We're going to create a basic interaction with an input text. And whenever we fill this input text, the h1 tag above will say
Hello [value of the input text]! instead of hello world.
188. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1>
Hello world!
</h1>
<input type="text" />
</body>
</html>
In order to do this, we're going to need a new component, called amp-bind.
189. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1>
Hello world!
</h1>
<input type="text" on="change:AMP.setState({state:
{username:event.value}})" />
</body>
</html>
We're gonna add an onchange event. So that whenever the value of this input text is changed, we can do something.
190. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1>
Hello world!
</h1>
<input type="text" on="change:AMP.setState({state:
{username:event.value}})" />
</body>
</html>
We're gonna use the function AMP.setState, which will change the state of the application. And yes, with amp4email, we
can say application when we're coding an email because it really feels like it.
191. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1>
Hello world!
</h1>
<input type="text" on="change:AMP.setState({state:
{username:event.value}})" />
</body>
</html>
And the state we're gonna change is a variable we're gonna call `username`. And this variable will get the value of the input
text, so we use the event.value variable proper to AMP.
192. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1 [text]="'Hello ' + state.username + '!'">
Hello world!
</h1>
<input type="text" on="change:AMP.setState({state:
{username:event.value}})" />
</body>
</html>
Now all we have to do is bind this variable to the h1 tag. And for this we're going to use a `[text]` attribute within brackets,
and define it to hello plus state.username.
194. <!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1 [text]="'Hello ' + state.username + '!'">
Hello world!
</h1>
<input type="text" on="change:AMP.setState({state:
{username:event.value}})" />
</body>
</html>
Now you might be wondering, how do this fit inside a real email. One of the hardest thing with interactive emails is usually
to have a proper fallback when you're in an unsupported client. And the way Google decided to handle it with amp4email
is to make it a complete separate version of your email.
195. Content-‐Type: text/x-‐amp-‐html; charset="UTF-‐8"
!
<!doctype html>
<html amp4email>
<head>
<meta charset="utf-‐8">
<style amp4email-‐boilerplate>body{visibility:hidden}</style>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-‐element="amp-‐bind"
src="https://cdn.ampproject.org/v0/amp-‐bind-‐0.1.js"></script>
</head>
<body>
<h1 [text]="'Hello ' + state.username + '!'">
Hello world!
</h1>
<input type="text" on="change:AMP.setState({state:
{username:event.value}})" />
</body>
</html>
-‐-‐001a114634ac3555ae05525685ae-‐-‐
Content-‐Type: text/html; charset="UTF-‐8"
Because you see, when you send an email, it's not just an HTML code.
196. From: Person A <persona@example.com>
To: Person B <personb@example.com>
Subject: An AMP email!
Content-‐Type: multipart/alternative;
boundary="001a114634ac3555ae05525685ae"
!
-‐-‐001a114634ac3555ae05525685ae
Content-‐Type: text/plain; charset="UTF-‐8"; format=flowed;
delsp=yes
!
Hello World in plain text!
!
-‐-‐001a114634ac3555ae05525685ae
Content-‐Type: text/x-‐amp-‐html; charset="UTF-‐8"
!
<!doctype html>
<html amp4email>
<head>
It's an actual email code. With multiple parts, with a plain text part, and the HTML part. And so Google introduces a new
content type : text / x-amp-html.
Google notes : "Some email clients will only render the last MIME part, so we recommend placing the text/x-amp-html
MIME part before the text/html MIME part."
197. Source : https://www.ampproject.org/docs/interaction_dynamic/amp-email-format
And I was afraid this all would be an attempt from Google to make emails less compatible, and that developers would end
up only coding AMPHTML emails. But Google states it in amp4email FAQ :
"the specification still requires senders to include a static, HTML version of the email that users can view if they choose."
198. Will it succeed?
1. YOU NEED TO REGISTER WITH GOOGLE.
2. YOUR ESP NEEDS TO SUPPORT IT.
3. EMAIL CLIENTS NEED TO SUPPORT IT.
1. This is very similar to Microsoft's Adaptive Cards or Google's own Quick Actions feature. This is so that Google can
control who send interactive emails or not. But IMO this is contrary to the original purpose of emails or the web, which
is to be for everyone.
2. It needs to support the new x-amp-html content type. And I don't see that ever happening.
3. No other email clients outside Google will ever support this. In fact, I don't think even Google's own clients won't fully
support this.
199. SO YOU
USE GMAIL
ON MOBILE ON DESKTOP
ANDROID OR WEBMAIL WITH A
G SUITE or public
ACCOUNT
WITH A
GMAIL
ACCOUNT
WITH A
POP/IMAP
ACCOUNT
DEFAULT GMAILIFIED
LEVEL 1 LEVEL 2 LEVEL 3
BASIC CSS CALC()
BACKGROUND
MEDIA QUERIES
<STYLE>
iOS
LEVEL 4?
AMP4email
If we go back to my Gmail's CSS support chart, it probably means we'll need to add a 4th level of support with amp4email.
But which versions will suport it ? The desktop for sure. But I don't think others will get it.
200. Standards
It almost looks like Microsoft and Google are trying to achieve the same thing in emails with Adaptive Cards and
amp4email. And I'm like… geez, talk to each others. Work together. Stop competing on frameworks that makes it harder
for everyone to use.