Lotus Notes/Domino → AL-Mail → Thunderbird → Gmail
と移動させてきた電子メールの日時がおかしい(他にもおかしいところはいろいろあったけど)。

すべて日時が1970年1月1日0時0分0秒になってた。

メールのヘッダを見ると


Date:  2000/01/02 12:34:56 +0900

たぶん、これは Lotus Notes/Domino のメール送信時についたヘッダ。

フォーマットがおかしいので、Thunderbird も Gmail も日時をきちんと認識してくれないみたい。

というわけでメールヘッダで使われている標準的な日時フォーマット(RFC 2822)に変換することにした。

まず、Gmail → IMAP → Thunderbird 3.1.7 on Windows XP な環境で、
Thunderbird にて、複数のメールを選択して
メニューから [ファイル] → [名前を付けて保存] → [ファイル] で *.eml ファイルを生成。

*.eml ファイルを notesmail というディレクトリに置いて、以下の Ruby スクリプトを Windows XP 環境で実行 (スクリプトファイルはいちおうShift_JIS, CR+LF)。

最初は PostedDate ヘッダを Date ヘッダに変換するつもりだったけど、よくみたらフォーマットがおかしいだけの Date ヘッダがあったからこちらを変換することに。


# (たぶん) Lotus Notes/Domino で送信したメールのローカル日時フォーマットを
# PostedDate:  2000/01/02 12:34:56
# Date:  2000/01/02 12:34:56 +0900
# 電子メールの標準的な日時フォーマット(RFC 2822)になるように変換
# Date: Thu, 02 Jan 2000 12:34:56 +0900
 
# 入力ファイルは、日本語を含むファイル名のemlファイル(中身はJISな日本語を含むテキスト)
 
require 'date' # for DateTime
require 'time' # for 組み込みの Time クラスを拡張する library time
 
indir = './notesmail'
outdir = './mail'
 
def from_posteddate(str)
  d = DateTime::strptime(str, 'PostedDate:  %Y/%m/%d %H:%M:%S')
  # JST(+09:00)になるように
  t = Time.local(d.year, d.mon, d.day, d.hour, d.min, d.sec)
  'Date: ' + t.rfc2822
end
 
def from_date(str)
  begin
    d = DateTime::strptime(str, 'Date:  %Y/%m/%d %H:%M:%S %z')
    'Date: ' + d.rfc2822
  rescue => e
    # ヘッダ以外の本文をパースしてエラーが出ることがあるので
    p e
    str
  end
end
 
Dir::entries(indir).each{|f|
  if File::ftype(indir + '/' + f) == 'file'
    infile  = File::open(indir + '/'  + f, 'r')
    outfile = File::open(outdir + '/' + f, 'w')
    while line = infile.gets
      if /^Date\:/ =~ line
        puts "[src]#{line}" # debug
        line = from_date(line)
        puts "[dst]#{line}" # debug
      end
      #if /^PostedDate\:/ =~ line
      #  puts "[src]#{line}" # debug
      #  line = from_posteddate(line)
      #  puts "[dst]#{line}" # debug
      #end
      outfile.puts line
    end
    infile.close
    outfile.close
  end
}

変換してできあがったファイルをThunderbirdにドラッグ&ドロップして完了。
ただ、Thunderbird が古いメールを保持しているのかおかしな挙動をする(最初うまくいかなかった)ので古いメールを削除(ゴミ箱からも削除)して[ファイル]→[フォルダを最適化]してからやったらうまくいった。

以下、Lotus Notes/Domino の Date とか PostedDate のフォーマットについての情報。

ノーツのnsf型式メールデータベースの内容を秀丸メールにインポートする方法を捜
しています.

今のところ,Structured_Text型式に書き出したもの(CTで区切られている)を,CTをC
T!に置換し,PostedDate:をDate:に置換して秀丸メール形式テキストファイルと指定
し,Dateヘッダと同じ日付にインポートするように指定してみましたが,日付が正常
にインポートされません.日付に関係するところのヘッダは下記のようになっていま
す.

PostedDate: 1998/03/14 04:44:18
RouteTimes: 1998/03/14 04:41:35-1998/03/14 04:41:35
DeliveredDate: 1998/03/14 04:41:35

何かよい方法がありましたらよろしくお願い致します.m(_ _)m

秀丸メール 情報交換会議室 - スレッド34221, 08/06/10
R5 SMTP Router 経由で受信したインターネットメッセージのヘッダー情報を確認するには、文書のプロパティでそれぞれのフィールド値を確認するしかありません。プロパティで見づらい場合にはメールボックスからメッセージを選択し、[ファイル]-[書き出し] でメッセージを Text ファイルに書き出すと、以下のような形式で RFC822 ヘッダーフィールドを確認する事ができます。

-----------------------------------------------
Received: from apa.lotus.co.jp ([aaa.bbb.ccc.ddd]) by SMTPSrv.lotus.co.jp (Lotus Domino Release 5.0.1b) with ESMTP id 1999122414333868:1 ; Sun, 24 Dec 1999 14:33:38 +0900
Received: from apa.lotus.co.jp (swalow.lotus.co.jp [bbb.ccc.ddd.eee]) by apa.lotus.co.jp (8.8.5/8.8.5) with ESMTP id OAA20183; Fri, 24 Dec 1999 14:59:28 +0900
$MessageID: <386303E4.48E3BB80@apa.lotus.co.jp>
PostedDate: 1999/12/24 14:25:56
From: First_Last <FLast@apa.lotus.co.jp>
$Mailer: Mozilla 4.51 [ja] (Win95; I)
X_Accept_Language: ja
MIME_Version: 1.0
SendTo: Notes_User@SMTPSrv.lotus.co.jp
Subject: 件名(Subject)
$MIMETrack: Itemize by SMTP Server on SMTPSrv/R501a(Release 5.0.1b|13 October 1999) at 1999/12/24 02:33:42 PM,Serialize by Router on SMTPSrv/R501a(Release 5.0.1b|13 October 1999) at 1999/12/24 02:33:43 PM,Serialize complete at 1999/12/24 02:33:43 PM,Itemize by Router on SMTPSrv/R501a(Release 5.0.1b|13 October 1999) at 1999/12/24 02:33:45 PM,MIME-CD by Notes Client on Notes User/Lotus(Release 5.0.1a|10 September 1999) at 1999/12/27 09:09:42,MIME-CD complete at 1999/12/27 09:09:43
SMTPOriginator: FLast@apa.lotus.co.jp
$UpdatedBy: CN=SMTPSrv/O=R501a,CN=Notes User/O=R501a
$Orig:
Categories:
$Revisions:
$FILE:
RouteServers: CN=SMTPSrv/O=R501a
RouteTimes: 1999/12/24 14:33:42-1999/12/24 14:33:45
$MsgTrackFlags: 0
DeliveredDate: 1999/12/24 14:33:45

本文
Body
----------------------------------------------

IBM - 716524: R5 クライアントでヘッダー情報を確認する方法

tags: Ruby zurazure

Posted by NI-Lab. (@nilab)