前回メールクライアントのUA情報について調査を行いました。
結果、シェアの多そうなOutlookExpressが嘘をついている!ことが判明しました。
どげんかせんといかん!ということで、その対策を考えてみました。
(そもそもブラウザ戦争にせよ、ベンダーの尻拭い的なのは不愉快ですが。。)
■案1:スクリプトを仕込む
■案2:サーバに送信されるヘッダー情報を観察してみる
案1はメーラーは基本的にJavascriptは処理しないだろうという仮説に基づいた方法です。
javascriptが動作する場合はパラメータ(クエリ)ありで画像のURLを設定し、動作しない場合はパラメータなしとします。
仮説どおりであれば、IEだとパラメータがついて、OLだとつかないので見分けがつきます。
案2は、HTMLメールを表示する際に送信されるHTTPヘッダーがOutlookExpressとInternetExplorerでは何か違いがあるのではないか?という仮説です。
■案1:スクリプトを仕込む
今回の実験では単純に<script>と<noscript>で振り分けを実装しました。
scriptタグではパラメータありのimgタグを出力し、noscriptタグでは普通にパラメータなしのimgタグを記述しました。
─【案1の結果】────────
OutlookExpress:パラメータなしでのアクセス
InternetExplorer:パラメータありでのアクセス
おぉ!うまくいきました!
Javascriptを使えば、IEとOEの見分けはつけられそうです!
ただ、、、、です。
HTMLメールにスクリプトを仕込むなんて、迷惑メールとして扱われる可能性が高そうです。
迷惑メールになっては、そもそもメールを送る意味が無いですよね。
今回はメールクライアントの情報をどこまで得られるか?という視点での実験なので、よいこのみんなはマネしないように!
■案2:サーバに送信されるヘッダー情報を観察してみる
こちらは案1のようにクライアント側に仕込まないので、これによって迷惑メールとなることはないでしょう。
もし判別できれば実際に活用できそうです。期待が膨らみますね!
実験はHTMLメール内にimgタグを仕込み、そのソースURLをPHPスクリプトにします。
PHPスクリプト側で、ユーザのリクエストヘッダーを解析・記録します。
OutlookExpressとInternetExplorerでリクエストヘッダーに何か違いがあれば、判別ができることになります。
さて、その結果は・・・
─【案2の結果】────────
違いがあったのは、以下の3つ。
・REQUEST_TIME
・REMOTE_PORT
・HTTP_ACCEPT
まずREQUEST_TIMEはリクエストのあった日時なので違って当然です。無視。
REMOTE_PORTは、ユーザ側の接続に使用しているポートですが、これは接続のたびに変わります。やはり、無視。
最後に、HTTP_ACCEPTですが・・・これは・・・使えそうです!
… InternetExplorer …………
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-silverlight, */*
… OutlookExpress …………
*/*
OutlookExplorerの方がシンプルな内容となっています!
HTTP_ACCEPTの値が「*/*」のみの場合はOutlookExpressだと考えられます。
■結論!
OutlookExpressとIEの違いを判別することは「可能」です!
方法1:SCRIPTタグを使って、判別する
方法2:リクエスト情報からHTTP_ACCEPTを元に判別する
※方法1はスパム判定に引っかかる恐れがあるため、現実的ではない。
以上、電子メールクライアントのUA調査についての調査結果でした~!
皆さんもたまには、メールソフトについて考えてみてはいかがでしょうか?