29
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-04-29

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

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

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

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

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

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

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 によると、Content-Type: multipart/alternative では送信側は最初のパートを最もプレーンなフォーマットで後のパートになるほどリッチなフォーマットにすべきで、受信側は表示可能な最後のパートを表示すべきということが書かれています。

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

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

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

  1. マルチパートについてはこちらを参照: インターネット・プロトコル詳説(4):MIME(Multipurpose Internet Mail Extensions)~後編 - @IT

  2. コマンドラインからのメールの送信はこちらを参考にしました: Macでコマンドラインやプログラムからmailを送る - Qiita

29
27
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?