スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Thunderbirdでメールを受信したら1970/1/1 9:00の日付になった

Thunderbirdでメールを受信したら日付が1970/1/1 9:00となる事象について調べたときのメモ


● 事象
  
  ・あるサーバから定期的に送られてくるメールの受信日が1970/1/1 9:00となる
  ・メーラは「Thunderbird12」を利用。(おそらくほかのVersionでもいっしょ → 後述)


● 調査

  ・ほかのメーラではどうなるのかを調べてみた。(かっこ内はバージョン)
   
   Thunderbird(12) → ×
   MicrosoftOutlook(2003) → ○
   WindowsLiveメール(2009) → ○
   AL-Mail32(Ver1.13.a) → ×
   EdMax(2.86.3F) → ○
   Evolution(3.2.3) → ×

   ほかでも発生する様子。


● 正常メールと異常メールの比較

  過去のメールと、以上メールのヘッダを比較してみたところ"Date:"というヘッダの部分に違いがあった。

  正常メール → "Date:"ヘッダ自体が存在しない
  異常メール → "Date:"ヘッダが存在するが文字化けしている。
           
  以上メールを見るとこんな感じ

  Dateヘッダ

  ん?文字化コードとかそういう話ですか?(無知)
  というわけで、これのメールをローカルに保存。(Thunderbirdは.emlという形式)
  これをテキストエディタで開くと

  Date: 金, 11 5 2012 20:07:18 +0900

  となっている。 
  ほかの正常のメールを見ると"金"(日本語)となっているところは"Fri"となっている。
  試しにここを"Fri"に書き換えて、Thunderbirdで読み込んでみる。

  
  ・・・ダメ。


  さらに違いを見てみると正常のものは"5"という月を表す箇所が、"May"となっている。
  ここも書き換えてみて、再度挑戦。
  こんな感じ

  Date: Fri, 11 May 2012 20:07:18 +0900


  正常な日付で認識した!!



  どうやらこれっぽいかも?
 


● 原因??
 
  どうあるべきが正しいのか。RFCを調べてみる。
  RFC:5322 (Internet Message Format)
  [日本語訳]

  これの「3.3章 日付・時刻の仕様」を見ると、日付のフォーマットが規定されている。
  
  [要約]
   ① Dateヘッダは必須ではない (あってもなくてもいい)
   ② 書式は [ day-of-week "," ] date time  となっている。
     ・day-of-week
      → 曜日のことで、"Mon","Tue"...などと英語3文字で表記。
        これはオプションで、入れなくてもいい。入れる場合は、後ろに","が必要。
        例) Mon, 11 ・・・

     ・date
      → day month yearで表わす。
        day は2ケタの数字
        month は"Jan","Feb"などの英字3文字
        year は数字4桁

     ・taime
      → hour ":" minute [ ":" second ]
        hour,minute,secondはそれぞれ2ケタの数字。(secondは省略可)
         
   
  まとめると

     Fri, 11 5 2012 10:00:00

  のような表記になる。この後ろに +0900 といったタイムゾーンを表す数字が入る。

   
   なので、今回はヘッダがそういう状況で送られてくるのが問題で、ひいてはサーバ側の問題だった。



   なお、このDateヘッダの扱いはRFCでこう書かれていた。

    「発信日付は、メッセージが完成し、メール配送システムへの投入準備ができたことをメッセージ作成者が示した日付と時刻とを表す。 (中略) これはメッセージが実際に転送された時刻ではなく、メッセージを作成した人または人以外の作成者がメッセージを最終的に完成させて転送の準備ができた時刻を保持することを目的としたものである。」

 




● 参考
  ちなみに、なぜOutlookではうまく表示されて、Thunderbirdはダメなのか。
  
  Thudnerbirdでは"Dateヘッダ"の扱いが以下の様になるらしい。

   ・Dateヘッダが不正: 1970/1/1 9:00という日付で表示
   ・Dateヘッダがない: Thunderbirdがそのメールを受信した日付で表示


 
  Outlookがなぜ表示されるのかというと、ここを柔軟に対応しておりDateヘッダがない場合は"Received:"ヘッダに記載されている時間をみて表示するらしい。
   



スポンサーサイト

テーマ : ソフトウェア
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

Author:Opecha-DaDa
ニッチな技術メモ的なブログになりつつありますが、だからこそあなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。