Outlook、Gmail、スマホでも崩れない必勝HTMLメールコーディング

Outlook、Gmail、スマホでも崩れない必勝HTMLメールコーディング

よしだです。

10年近く会っていない人何人かに連絡を入れたら70%の確率でマルチだと思われました。連絡はマメにとるのが良いですね。

 

さて、今回はHTMLメールのコーディングについての記事です。

近頃、新規HTMLメールのコーディングに携わることが多くなりましたので、備忘録を兼ねて、HTMLメールコーディングの基礎、メールソフト別対策法の解説、それからサンプルを使用してよくあるレイアウトパターンの紹介をしたいと思います。

 

サンプル・対応メールソフトについて

◎サンプル


以下メールソフトに対応したサンプルです。

対応するメールソフト

・Microsoft Office Outlook 2007(以下「Outlook」と称します)
・Gmail(PC、iOS、Android)
・Yahoo!メール(PC、iOS、Android)
・Thunderbird
・Becky!
・iOS(メール)
・Android(@メール、Eメールスマートプラグイン)

 

HTMLメールコーディングの基本

HTMLメールはメールソフトを通して閲覧することが可能ですが、使用可能なHTMLの要素・CSSプロパティはメールソフトによってかなり異なっております。

◎基本

・テーブルコーディング

・HTML4.01を使用し、配信時は文字コードを「iso-2022-jp」に設定

・画像、外部CSSは絶対パス

・CSSは<style>タグ内に記述。必要に応じてstyle属性を使ったインラインCSSで記述
※Gmailが<style>タグ内のCSSに対応したようです。
https://goo.gl/Xld1yn

・余白設定はtd要素に幅や高さを持たせて調整、paddingは上下余白設定のみ(長年の研究の結果、推奨します)

・背景画像は使用しない

 

◎よく使用するタグ

・table要素

・tr要素

・td要素

・div要素

・p要素

・a要素

・br要素

・img要素

他以下URL参照
https://mailmarketinglab.jp/first-step-to-learn-about-html-mail/

 

◎よく使用するCSSプロパティ

・margin

・padding

・display

・width

・height

・background-color

・font系(font-family、font-size等)

・line-height

・color

他以下URL参照
https://www.campaignmonitor.com/css/

 

サンプル解説

よくあるレイアウトパターンをまとめました。

ヘッダー・各コンテンツセクション・フッター、セクション内のタイトル・本文・ボタンなどそれぞれパーツ毎に細かく<table>を設定すると崩れにくい上、レイアウトが崩れた場合でも原因の特定がしやすいです。

ヘッダー・メタ情報

DOCTYPE宣言はほとんどのメールソフトで対応しているHTML4.01にします。文字コードは配信する持に一般的と言われる 「iso-2022-jp」に設定。ファイルを編集する際は「shift_jis」または「utf-8」を指定しても良いでしょう。

 

◎<style>の設定

</head>タグの直前に<style>タグを挿入し、基本スタイルを設定しています。

Androidの@メールでは長いテキストを折り返してくれないので<td>に「word-break: break-all;」を設定してください。

ここから各セクション毎にCSSを追加していきます。

 

◎コンテナ

waku

幅640pxのHTMLメールの大枠です。大元のテーブルを余白・コンテンツ・余白に三分割しています。この構造が基本となっております。

<body>要素には<style>要素内で指定したCSSをインラインでも記述してください。メールソフトによっては<body>要素の<style>内CSSが効きません。

<table>要素に記述された属性はそれぞれwidth(幅)・cellspacing(セルの間隔)・cellpadding(セル内の余白)・border(外枠の太さ)です。こちらは必ず記述してください。

各<td>要素のwidth属性の値の合計値は親テーブルの幅と合うように記述します。

 

◎ヘッダー

header

td要素のcolspan属性でセルを横方向につなげています。値にはつなげるセルの数を指定します。

メールソフトによってCSSのborder-widthが指定通りに行かないため、上下の5pxのボーダーはtd要素に高さと背景を設定することで表現しています。

CSSのハイライト部分に注目してください。何やら見慣れないプロパティがありますね。この「mso-line-height-rule: exactly;」はOutlookでメイリオフォントを効かせるための記述です。こちらを記述せずにメイリオフォントを指定しますとline-heightがうまく効きません。また、メイリオフォントを使用時、line-heightはpx指定でなければなりません。

 

◎セクション1

sec_01

メインイメージ、その下にタイトル、テキストを設置したよくあるパターンのひとつです。左右に20pxずつ余白をとり、中央にコンテンツを配置しています。

ハイライトされているセルのようにtd要素の中に新たなtable要素を置くことが可能です。

ちなみにヘッダー・フッター以外、セクション毎に左右20pxずつ余白をとっています。コンテンツ内の大枠に設定してしまった方が楽なのですが、特定のセクションだけ余白やコンテンツ幅が変わるといったことに対応しやすくなるためこのような方法を敢えて採っております。

 

◎セクション2

sec_02

タイトルとコンテンツは別々の<table>要素区切っています。ハイライト部分は画像とテキストが横並びになる箇所です。rowspan属性を用いて表現することもできますが、Outlook等で崩れる場合があるため、使用は控えた方が良いでしょう。

 

◎セクション3

sec_03

横並び2カラムのレイアウトです。幅560pxのテーブルをコンテンツ(270px)・余白(20px)・コンテンツ(270px)に分け、さらにコンテンツのtd要素の中に<table>要素を入れ子にしています。

 

◎セクション4

sec_04

幅3pxのボーダーはCSSで記述せずtd要素に幅や高さ、背景色を持たせて表現しています。CSSのborderプロパティは使用できますが、メールソフトによって線の縦と横の幅がバラバラになるので、このような方法を採っています。

 

フッター

footer

 

コードを見る限り、セクション1と似たような構造です。黄色のボーダーはセクション4で解説したようにtd要素に幅や高さ、背景色を持たせて表現しています。

 

メールソフト別対策方法

サンプル解説でちょこちょこ出てきましたが、ここでメールソフト別に崩れやバグの対策方法を紹介します。

 

◎Outlook

・font-sizeにメイリオを指定した場合、line-heightが意図通りに効かない

そのテキスト要素を囲うタグに対して。px指定のline-heightと「mso-line-height-rule: exactly;」を記述します。

・背景画像、グラデーションが使えない

「background-image」が使えません。色は単色のみとなります。

・td要素のrowspan属性が効かない時がある

rowspanは使用せず、<table>要素をうまく組み合わせて設計する(サンプルのセクション2参照)

 

◎Gmail

・外部CSSが効かない

<style>タグ内、またはインラインCSSで記述してください。

 

◎iOS(デフォルトメールソフト)

・内容に電話番号を入れた場合、自動リンク設定される上、スタイルが効かない。

<meta name=”format-detection” content=”telephone=no”>を記述してもメールソフトの上では無効になります。

そのため自動改行の実体参照「&#8203;」を数字の後に記述することで解決します。(この記述により一部の4.x系Android端末で崩れる場合があります…)

・iOS10系でのレスポンシブHTMLメールのレイアウト崩れ

iOS10へのアップデートにより、レスポンシブHTMLメールが崩れるという事象が報告されています。

要素をpx指定でなく、%指定にすると改善できる?みたいです。

 

◎Android

―デフォルトメールソフト(@メール)

・テキストを折り返してくれない。

「word-break:break-all;」を記述すれば解決します。

機種やOSによってメディアクエリの対応にバラつきがある

長年の研究の結果、XperiaやGalaxyなどの主要機種ではほぼ対応しているようです。

―Gmailアプリ

稀に原因不明の崩れが発生します。アプリ右上アイコンの「自動サイズ変更」を操作するか、以下リンク先の方法で解決することができます。

http://hcondo2000.blogspot.jp/2014/07/androidgmailhtml.html

 

◎Becky!

・<img>要素に対して、border属性を使用しないと意図しないボーダーが出てくる

<img>要素にborder属性を記述してください。(<img src=”” … border=”0″>)

・左右のpaddingが効かない

左右の余白は<td>要素のwidth属性を使って調節してください。

・「text-align」を指定しない場合、すべて中央ぞろえ

CSSのtext-alignまたはalign属性を逐一記述してください。

 

テスト配信について

コーディングしたものをブラウザ上で確認して問題がなければ、一旦自身でお使いのメールソフトから自分宛にテスト配信をしてみましょう。

テスト配信による検証作業はHTMLメールコーディングにおいて最も時間がかかります。

対応するメールソフトが多ければ多い程、修正に時間がかかり、あるメールソフトの崩れを直したら、今度は別のあるメールソフトで崩れるなんてことにも遭遇するかもしれません。

上記の基本やバグ対策を行えばおそらく問題ないかと思います。

 

おわりに

テーブルコーディングは慣れてしまえば大したことはありません。
HTMLメールコーディングで最も大変なのは検証作業です。実際に配信してみないと崩れやバグの発見ができないため、修正作業に時間がかかることが多々あるかと思います。

先に述べました「HTMLメールコーディングの基本」や「メールソフト別対策方法」を考慮してコーディングすれば、大概のメールソフトはカバーできると思います。

また、昨今レスポンシブHTMLメールが普及していますが、スマホOSの大きなアップデートによって今まで正常に閲覧できていたHTMLメールのレイアウトが崩れた、なんて場合があるので、レスポンシブHTMLメールに関しては「このように設計すれば絶対崩れない」という方法は現段階ではわかっておりません。なにかわかりましたら、レスポンシブHTMLメールについての記事も書いていこうかと思います。

Share on Facebook0Tweet about this on TwitterShare on Google+0Email this to someone