WWDC 2016の落選メールが当選メールだった話


ありのまま先週起こったことを話すぜ！

「WWDCの落選メールが来たと思ったら当選していた」

な…何を言っているのかわからねーと思うが（ry

![](https://qiita-image-store.s3.amazonaws.com/0/9836/715696d9-2d3f-81c0-b59f-b53330fe4a10.png "wwdc-email.png")

どちらも同じメールで、左がOS XのMail.appで表示したもの、右がiOSのMailで表示したもの。しかしその内容はまったく逆のものでした。どうしてこんなことが起きたのか？

このメールはいわゆるHTMLメールで、Content-Typeヘッダーに `multipart/alternative` が指定されてプレーンテキスト版とHTML版両方を含んでいました。[^1]

[^1]: マルチパートについてはこちらを参照: [インターネット・プロトコル詳説（4）：MIME（Multipurpose Internet Mail Extensions）～後編 - ＠IT](http://www.atmarkit.co.jp/ait/articles/0104/18/news002.html)

メールのソースはこんな感じです。（一部省略）

```
Subject: See you at WWDC 2016.
MIME-Version: 1.0
Content-Type: multipart/alternative; 
	boundary="----=_Part_21435134_475188922.1461380226746"

------=_Part_21435134_475188922.1461380226746
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-Disposition: inline

Dear Masayuki Iwai,
-------------------------------------------------------------

Thank you for registering for the random selection process to attend WWDC 2=
016.

（中略）

------=_Part_21435134_475188922.1461380226746
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: QUOTED-PRINTABLE
Content-Disposition: inline

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org=
/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" xmlns=3D"http://www.w3.org/199=
9/xhtml">
<head>
    <title>See you at WWDC 2016.</title>
=09<meta http-equiv=3D"content-Type" content=3D"text/html;charset=3Dutf-8" =
/>

（中略）

</body>
<img src=3D'http://outsideapple.apple.com/img/APPLE_EMAIL_LINK/spacer4.gif?=
v=3D2&a=3Dk%2BmjWPCFEH1m5ry2zndhAnQ3KF5%2BETE7bF8B0noUrq0uBAOmHzBUSjD1TRVGj=
SxUwuMOnmb4uUDjxmxjFVrUHDqGi6zn%2BmwGZR9n1y4oZLo%2BKRkYuPS4MAmijGVhS1hcS8o0=
HiwbZ16dhN7sWkAl2WwNiFe3f3zEgkvv2afNmRhnSOLAj%2F5jjMwp2N4CjQUT0MCISekHgDteS=
55tX%2BM6BTEH6rkXkHrcCMIhHDtr5%2FXFcYP%2FiM232t6QUgiiiNaBykZPgkf%2BEPpbcmgG=
zWYrRV06%2F2iHtXIMMzCn2kqTsCjmouIsny9X97NhAXD37DD7cJseI%2FhtatHdJpq%2B%2FqI=
LrqbCrx3QjC5R9TGT4KKIqlDmqp7eWYDWkQAV3TWTHfGI1%2BeLhvXl1JDLHYqyYKrneGbZgt7t=
VqQo64%2FVCqUS6WaIZpmoB2kusU%2B7iS%2F6MSG2'
```

これを見ると `----=_Part_21435134_475188922.1461380226746` というバウンダリーで各パートが区切られていて、最初にプレーンテキストのパート、後にHTMLのパートという構成になっています。
プレーンテキストパートとHTMLパートで真逆のことが書かれているのは単純にAppleのミスだと思われるのですが、まったくひどい話です。

問題は、なぜOS XのMail.appではプレーンテキストパートが表示されて、iOSのMailではHTMLパートが表示されるのかということです。

[RFC1341(MIME) : 7 The Multipart content type](http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) によると、`Content-Type: multipart/alternative` では送信側は最初のパートを最もプレーンなフォーマットで後のパートになるほどリッチなフォーマットにすべきで、受信側は表示可能な最後のパートを表示すべきということが書かれています。

ここでメールのソースをよく見てみると、HTMLパートの終わりにマルチパート全体の終了を表すバウンダリーがありません（`------=_Part_21435134_475188922.1461380226746--` で終わるはず）。それどころか `html` の閉じタグもなく、そもそも `</body>` の後に `img` タグがあって途中で切れてしまっているのがわかります。これはひどい。
試しに最後に終了を表すバウンダリーを追加してメールを送信してみると[^2]、OS XのMail.appでもHTMLパートが表示されました。

[^2]: コマンドラインからのメールの送信はこちらを参考にしました: [Macでコマンドラインやプログラムからmailを送る - Qiita](http://qiita.com/tmsanrinsha/items/75e06fbdd7e12409bb02)

ということはつまり、OS XのMail.appはピュアに後半のHTMLパートが壊れていると見なしてプレーンテキストパートを表示し、iOSのMailはここでマルチパートが終わっていると見なしてHTMLパートを表示していた、というのが真相のようです。
同じApple製のアプリケーションでも細かい部分での仕様は違ったようです（ちなみにThunderbirdはiOSのMailと同様の挙動でした）。

ということで、Appleさんしっかりしてくださいよ！という気持ちを胸に抱きつつWWDCに参加したいと思います。