最近、Gmailを使うようになった。過去のメールをGmailのメールボックスにインポートさせたい。

いろいろ検索していろんな方法を試したが、今のところ、これが一番確実。

1. これまで使っていたメールソフトからメールをエクスポートする。なんとかして拡張子が.emlの
電子メールファイルに変換しておく。1メール1ファイル。
2. 転送ツールは、Eml2Imapというソフトを使う(現時点では最新バージョンは1.2.2のようだ)。

最初はOutlookで転送させようとしたが、途中、あるメールで失敗するとその時点で止まってしまう。
数万通に及ぶメールの移行作業なので、なるべく勝手にやっておいて欲しい。
失敗は失敗で後で確認できればそれで良いので、止まらないで欲しい。
また、どの.emlファイルが転送済みなのかがわからず、どこから作業再開すればいいかもわからない。

Eml2Imapでは、転送終了した.emlファイルは自分のパソコンの中から消してくれるのでわかりやすい。
Eml2Imapでも、失敗が発生するとOutlook同様に僕がいちいち「開始」ボタンを押してあげないといけない。
また、Eml2Imapは、たまにある電子メールファイルの転送中の状態のまま延々と止まってしまうことがある。
その場合は、一旦「停止」ボタンを押して、しばらくして「開始」ボタンを押すと再び転送を始められる。

そ、こ、で。

Eml2Imapの「開始」「停止」ボタンを交互に自動的に押すプログラムを書いた。
下記のファイル「repeat-eml2imap.uws」をUWSCというソフトに食わせると、

3分待つ→「停止」を押す→「開始」ボタンが押せる状態になるまで待つ→
→「開始」ボタンを押す→3分待つ→「停止」を押す→…

という動作を実現できる。これでずっと転送を続けることができるようになった。

repeat-eml2imap.uws
---------0---------0---------0---------0---------0---------0---------

repeat
gIdWin = GETID("Eml2Imap")
sleep(1)
until gIdWin <> -1

while 1
sleep(300)
CLKITEM(gIdWin, "停止");

if GETID("Eml2Imap") = -1 then break

while chkbtn(gIdWin, "開始") = -1
sleep(1)
wend

sleep(10)
CLKITEM(gIdWin, "開始");

if GETID("Eml2Imap") = -1 then break
wend

---------0---------0---------0---------0---------0---------0---------

Gmailは、Message-Id:を見ていて、重複していれば再度インポートさせようとしても
無視してくれるみたい。なので、何度もトライして全然大丈夫。