Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

「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 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away