携帯キャリアのメールアドレスとHTMLメールの闇

これは [メール Advent Calendar 2018](https://qiita.com/advent-calendar/2018/mail) の 22日目 です。

# 要約

日本の携帯キャリアメールアドレスにシステムからHTMLメールを送るとき、どんなフォーマットで送るか決めることが難しいよ。

# HTMLメールには(おおざっぱに)4種類のMIME構造がある

HTMLメールは、「①テキストとHTML両方を含んでいるか、それともTEXTパートなしHTMLパートのみか」「②HTML中で使用する画像を添付しているかインターネット参照にしているか」によって、4種類のMIME構造に大別することができます。

今回取り上げるのは「②HTML中で使用する画像を添付しているかインターネット参照にしているか」です。

### (前提)かならずマルチパートで送ろう

今回取り上げる携帯キャリアメールアドレスのみならず広く不特定多数にメールを送るとき「①テキストとHTML両方を含んでいるか、それともTEXTパートなしHTMLパートのみか」は、必ずテキストとHTML両方を含んだマルチパートで送った方が良いです。
以下では触れません。（HTMLパートのみメールを日本の携帯キャリアメールアドレスに送ると、ひどい結果になる）

### HTML中で使用する画像をインターネット参照にするとは

Webメールやメーラー間のメールと違って、システムが送信するHTMLメール(典型例：ECサイトの注文完了メールやメールマガジン)の多くは、含まれる画像をインターネット上から取得します。届いたメールのHTMLには

> ＜img src="http://example.com/logo.jpg" /＞

と書いてあって、受信者が画像を開いたときにインターネット上の画像を取得して表示されます。

システムが送信するHTMLメールで、画像を添付せずインターネット上から取得させることが一般的なのは、

- 添付するとメールサイズがとても大きくなる(だいたい50KBが1MBくらいになるかな)。処理量・転送量が増える
- メールを100通送っても全員が見るわけでない、見る時間もバラバラ。だから、メールを開いた際にインターネットへ取得させたほうが、転送量が少なくなり、負荷の集中も下げられる。

からです。

問題はHTML中で使用する画像をインターネット参照にできないメールアドレスが、日本の携帯キャリアメールアドレスにはかなりある、ということです。

# 日本の携帯キャリアメールアドレスとその種類

では、「受信者がHTMLメールを開いたときにインターネット上の画像を取得して表示」するかどうか、の観点から日本の携帯キャリアメールアドレスを分類すると以下のようになります。

|キャリア|受信環境|インターネット画像参照|
|:-:|:-:|:-:|
|@docomo.ne.jp|iPhone|OK|
|@docomo.ne.jp|Android|NG|
|@docomo.ne.jp|ガラケー|NG|
|@ezweb.ne.jp,@au.com|iPhone|OK|
|@ezweb.ne.jp,@au.com|Android|OK|
|@ezweb.ne.jp,@au.com|ガラケー|NG|
|@softbank.ne.jp|iPhone|NG|
|@softbank.ne.jp|Android|NG|
|@softbank.ne.jp|ガラケー|NG|
|@i.softbank.jp|iPhone|OK|

頭の痛い表ができました。

いまどき「インターネット画像参照」NGなメール環境は世界的に珍しいのですが、さらに、**メールアドレスだけ見ても「インターネット画像参照」できるかは分からないのです。だって、メールアドレスを見ても相手がどんな受信環境かは分からないですから**。
ソフトバンクのiPhone用メールアドレス @i.softbank.jp は例外で、これだけは「インターネット画像参照」OK確定です。

携帯キャリアメールアドレスの「インターネット画像参照」NGな環境に、「インターネット画像参照」するHTMLメールを送ると、真っ白になったり、「×」画像がたくさん並んだ表示になります。
「えっ？テキストとHTML両方を含んだマルチパートで送るんだから、不都合なHTMLパートではなくテキストパートが表示されればいいのに」と思った方は鋭い。マルチパートはそのような目的のためにあるものですが、**携帯キャリアメールアドレスを扱う「インターネット画像参照」NGな環境は、ガラケー時代のデコメール仕様のHTMLが来る想定で表示するのです。**

ガラケー時代のデコメールは、このようなものです。

- テキストとHTML両方を含んだマルチパートで送る
- HTMLで使用する画像はそのメールに添付ファイルで含める
- HTMLの使用できるタグは限定されている

※デコメールの仕様 - NTT docomo 社 デコメール
https://www.nttdocomo.co.jp/service/developer/make/content/deco_mail/index.html

# ではどうやって送るか

日本の携帯キャリアメールアドレスに対して、3つの戦術があります。
1.HTMLメールをあきらめてTEXTメールで送る
2.メールと同内容のコンテンツをWebに作って、HTMLのメールの先頭にそのURLを貼り付けて送る
3.相手がどんな受信環境かあらかじめ把握した上で送り分ける

### 1.HTMLメールをあきらめてTEXTメールで送る

日本の携帯キャリアメールアドレスドメインにはTEXTパートのみで送ります。これはシンプルです。
メールの訴求力・分かりづらさは低下しますが、受信者は確実にメールを見ることができます。その中のURLもクリックできます（URLについては @softbank.ne.jp×iPhone だけ例外、後述）。

### 2.メールと同内容のコンテンツをWebに作って、HTMLのメールの先頭にそのURLを貼り付けて送る

メールを送るシステム(ESP - Email Service Provider)で採用されていることが多いですが、メールを送ったら、これと同内容のコンテンツをWebに作って、HTMLのメールの先頭にそのURLをリンクにとして貼り付けて送ります。
メールマガジンで「メールを見られない方はこちら」という表記が先頭にあるの見たことあると思います。あれです。

こんなデメリットがあります。

- 手間(一から開発すると大変)
- URL流出に備えて、個人情報やインターネットにさらされると困る情報はWebに載せない → 注文完了のメールにこの方式は無理
- こうしても、インターネット画像参照NGな環境でメールを見たとき、この案内とHTML中のテキスト以外は真っ白なので見栄えが悪い。受信者にワンクリックさせるのも手間。

### 3.相手がどんな受信環境かあらかじめ把握した上で送り分ける

相手がどんな受信環境をあらかじめ把握します。
会員登録時などサイト側でとる場合もありますし、メールを送るシステム(ESP - Email Service Provider)で取得してくれるものも多いです。(例 ― [実は複雑！「スマホ向けHTMLメルマガ」の配信前に注意すべきこと](https://webcas.azia.jp/email/knowhow/smartphone_mailmag/) の 方法（2）デバイス送り分け機能を使って配信する とか )

このときは

|キャリア|受信環境|どんなメールを送るか|
|:-:|:-:|:-:|
|@docomo.ne.jp|iPhone|画像外部参照するHTMLメール|
|@docomo.ne.jp|Android|デコメ仕様のHTMLメール、または、TEXTメール|
|@docomo.ne.jp|ガラケー|デコメ仕様のHTMLメール、または、TEXTメール|
|@ezweb.ne.jp,@au.com|iPhone|画像外部参照するHTMLメール|
|@ezweb.ne.jp,@au.com|Android|画像外部参照するHTMLメール|
|@ezweb.ne.jp,@au.com|ガラケー|デコメ仕様のHTMLメール、または、TEXTメール|
|@softbank.ne.jp|iPhone|TEXTメール|
|@softbank.ne.jp|Android|デコメ仕様のHTMLメール、または、TEXTメール|
|@softbank.ne.jp|ガラケー|デコメ仕様のHTMLメール、または、TEXTメール|
|@i.softbank.jp|iPhone|画像外部参照するHTMLメール|

と送り分けします。

### なんでこんなことになっているのか

なぜ携帯電話の主流がスマートフォンに代わって久しいのに「Androidにはデコメ仕様のHTMLメール」みたいな**闇表現**が出てくるか。これは、日本の携帯キャリアがガラケー時代からメールの扱いを変えていないためです(auは変更した)。

まず、iPhoneでメールを受信するアプリは、"メール"アプリと決まっています。なので、携帯3キャリアとも iPhone あては（世界基準で）「インターネット画像参照」OKです。

|キャリア|受信環境|インターネット画像参照|どんなメールを送るか|
|:-:|:-:|:-:|:-:|
|@docomo.ne.jp|iPhone|OK|画像外部参照するHTMLメール|
|@ezweb.ne.jp,@au.com|iPhone|OK|画像外部参照するHTMLメール|
|@i.softbank.jp|iPhone|OK|画像外部参照するHTMLメール|

一方、Androidでメールを受信するアプリは、各携帯キャリアがアプリを作成し提供しています。この各携帯キャリアが提供するアプリのうちdocomo, softbank は、いまだにガラケー時代のデコメ仕様のHTMLメールを基準とし表示します。au だけ変わってくれました。

|キャリア|受信環境|インターネット画像参照|どんなメールを送るか|
|:-:|:-:|:-:|:-:|
|@docomo.ne.jp|Android|NG|デコメ仕様のHTMLメール、または、TEXTメール|
|@ezweb.ne.jp,@au.com|Android|OK|画像外部参照するHTMLメール|
|@softbank.ne.jp|Android|NG|デコメ仕様のHTMLメール、または、TEXTメール|

ガラケーには、ガラケー時代のデコメ仕様のHTMLメール、または、TEXTメールで送るのは、仕方ないことです。現在、ガラケー用サイトはどんどん閉じているのでここはそのうち無視できる量に減るでしょう。

|キャリア|受信環境|インターネット画像参照|どんなメールを送るか|
|:-:|:-:|:-:|:-:|
|@docomo.ne.jp|ガラケー|NG|デコメ仕様のHTMLメール、または、TEXTメール|
|@ezweb.ne.jp,@au.com|ガラケー|NG|デコメ仕様のHTMLメール、または、TEXTメール|
|@softbank.ne.jp|ガラケー|NG|デコメ仕様のHTMLメール、または、TEXTメール|

### 鬼っ子、@softbank.ne.jp×iPhone

最後に、

|キャリア|受信環境|インターネット画像参照|どんなメールを送るか|
|:-:|:-:|:-:|:-:|
|@softbank.ne.jp|iPhone|NG|TEXTメール|

が残っていました。

これは何かというと、iPhoneのSMS受信用"メッセージ"アプリが受信するメールアドレスです。SMS用ですので、HTMLなんぞ理解してくれません。
さらに頭がいたいのは、長文のTEXTメールを送ると、TEXT内のURLがクリックできないという仕様を抱えています。(SMSであり得ない長文は、表示されるだけという仕様っぽい)