オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

HTMLメールの様子

»

ちょうどメール関連のプログラムを作っているので、メールの話題です。
HTMLメールは個人的には嫌いなのですが、その理由を書いてみましょう。
HTMLメールとは、電子メールで本文を普通のテキストではなく、HTML形式で書くというもので、表現が豊かになるので良いという説もありますが、私は電子メールにそこまで求めていませんし、逆に、

・データサイズが大きくなる
 HTMLにするだけでもタグなどがついて大きくなるのに、さらにHTML形式を表示できないメーラー用にテキストもついたオルタネート形式になることが多いので大きくなる。

・WEB同様のセキュリティ的な危険がある
 スクリプトが埋め込まれたり、リンクで変なサイトに飛ばされたり、変なファイルをダウンロードしたりする可能性が高まる。

という理由で嫌いです。ところが、多くのメーラーでデフォルトがHTML形式になっているという困った状態なので、仕方なくメールデータを扱うプログラムを作るときには対応せざるを得ません。

たとえば、MacOSXの標準メーラー、Mail.appでHTML形式でメールを送るとこんな感じになります。

20110317_133038


From: =?iso-2022-jp?B?GyRCPi5LcxsoQiAbJEI4d0c3GyhC?= <komata@ncad.co.jp>
Content-Type: multipart/alternative;
    boundary=Apple-Mail-30--93873036
X-Smtp-Server: ns.ncad.co.jp
Subject: =?iso-2022-jp?B?TWFpbC5hcHAbJEIkKyRpJE4bKEJIVE1MGyRCJWEhPCVrGyhC?=
X-Universally-Unique-Identifier: cbaa8aa1-9644-43fd-822f-e85fa38b8514
Date: Thu, 17 Mar 2011 13:24:34 +0900
Message-Id: <628ECB99-B9FA-490E-900D-C1FAE1124840@ncad.co.jp>
To: =?iso-2022-jp?B?GyRCPi5LcxsoQiBQGyRCPi5LcxsoQg==?= <komata@ncad.co.jp>
Mime-Version: 1.0 (Apple Message framework v1082)


ここまでがヘッダ部分です。Content−Typeが「multipart/alternative」になっています。


--Apple-Mail-30--93873036
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
    charset=iso-2022-jp

HTML$B%a!<%k$O7y$$$@!*(B

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$B>.Ks8wG7(B(Mitsuyuki Komata)
$BF|K\%7!<!&%(!<!&%G%#!<3t<02q<R(B
  TEL:03-3565-3011($BD>!K!&(B2011$B!JBe!K(B  FAX:03-3565-3611
E-Mail: komata@ncad.co.jp
Office-URL: http://www.ncad.co.jp/
Blog-URL:http://blogs.itmedia.co.jp/komata/
Private-URL: http://www.ncad.co.jp/~komata/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


--Apple-Mail-30--93873036

ここまでが「text/plain」形式の本文です。


Content-Transfer-Encoding: 7bit
Content-Type: text/html;
    charset=iso-2022-jp

<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">HTML$B%a!<%k$O7y$$$@!*(B<div><br><div apple-content-edited="true">_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/<br>$B>.Ks8wG7(B(Mitsuyuki Komata)<br>$BF|K\%7!<!&%(!<!&%G%#!<3t<02q<R(B<br>&nbsp;&nbsp;TEL:03-3565-3011($BD>!K!&(B2011$B!JBe!K(B &nbsp;FAX:03-3565-3611<br>E-Mail:&nbsp;<a href="mailto:komata@ncad.co.jp">komata@ncad.co.jp</a><br>Office-URL:&nbsp;http://www.ncad.co.jp/<br>Blog-URL:http://blogs.itmedia.co.jp/komata/<br>Private-URL:&nbsp;http://www.ncad.co.jp/~komata/<br>_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/<br></div><br></div></body></html>
--Apple-Mail-30--93873036--

最後に「text/html」形式の本文がついています。本文が「text/plain」と「text/html」の2つの形式で格納されており、メーラーは表示したい方を選んで表示します。多くのメーラーはこの2つのタイプがくると、標準でHTMLの方を表示します。

これが、プレーンテキストのメールなら、こんな感じになります。
20110317_133250

From: =?iso-2022-jp?B?GyRCPi5LcxsoQiAbJEI4d0c3GyhC?= <komata@ncad.co.jp>
Content-Type: text/plain;
    charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
X-Smtp-Server: ns.ncad.co.jp
Subject: =?iso-2022-jp?B?TWFpbC5hcHAbJEIkKyRpJE4lVyVsITwlcyVGJS0lOSVIGyhC?=
=?iso-2022-jp?B?GyRCJWEhPCVrGyhC?=
X-Universally-Unique-Identifier: 35ac103c-20c6-4f01-9a53-52ca1248bff4
Date: Thu, 17 Mar 2011 13:32:44 +0900
Message-Id: <604A74AD-3F2E-4CE1-9E4D-7C5411000DA4@ncad.co.jp>
To: =?iso-2022-jp?B?GyRCPi5LcxsoQiBQGyRCPi5LcxsoQg==?= <komata@ncad.co.jp>
Mime-Version: 1.0 (Apple Message framework v1082)

$B%W%l!<%s%F%-%9%H%a!<%k$O$$$$$M$'!*(B

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$B>.Ks8wG7(B(Mitsuyuki Komata)
$BF|K\%7!<!&%(!<!&%G%#!<3t<02q<R(B
  TEL:03-3565-3011($BD>!K!&(B2011$B!JBe!K(B  FAX:03-3565-3611
E-Mail: komata@ncad.co.jp
Office-URL: http://www.ncad.co.jp/
Blog-URL:http://blogs.itmedia.co.jp/komata/
Private-URL: http://www.ncad.co.jp/~komata/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


とてもシンプルです!

どっちも、そのままでは内容が読めないじゃないか!?と思われるかも知れませんが、Content-Typeを見ると、「text/plain;charset=iso-2022-jp」となっていて、Content-Transfer-encodingが「7bit」となっていますので、7ビットでJIS形式のデータになっています。JIS形式は日本語文字を7ビットで表現するために、漢字IN(ESC $ B)から漢字OUT(ESC ( B)で囲んだ部分は漢字コードだ、という形式で、昔は8ビットデータが通らないことが多かったメールの通信ではよく使われます。他にもバイナリーデータなどはBASE64やquoted-printable形式で8ビットデータを7ビットにエンコードして使うこともあります。エンコード形式が複数あることと、本文やヘッダ部分での記法が数種類あることで、メールデータの扱いはとても難しいのです。

プログラミングネタも書こうかと思ったのですが、ここまでですでに結構長くなったので、まずはここまで。。

Comment(0)