山崎はるかのメモ

MS Outlookから Becky!にコンバート

- 各種エクスポートツールはあるけど、結局 自分で作るハメに -

 


それはね

今日は ちょっと早起きして インターネットアスキーの連載用原稿を書いてたんだけど、妙にノリが悪い。
こういう日は、おもいっきり現実逃避して、日頃は忙しくてできない雑多な仕事をしてしまうに限る。
そのまま悶々としているぐらいなら、悶々としない仕事をやりながら、コンディションが充実するのを待ったほうがいい。
時間は 有限なのだ。

そこで、かねてよりの懸案であった、「MS Outlook」のメールエクスポートに挑戦してみた。
うちの Outlookは、ちょっと目を離したすきに 5,000通以上のメールをストックしていやがったのだ。
そのサイズは170MB。
かなり 手のつけられない状態である。

 

まさにブラックボックスの Outlookシリーズ

MS Outlookシリーズは Outlook/97/98→Outlook Express4→Outlook Express5という変遷のしかたをしている。
これがまた データ構造がすべてバイナリで、添付ファイルも ひとつのメールデータベースにまとめてしまっている。
構造的には ISAMに似ているが(※MSはISAMだと主張したそうだが) ISAMデータベースとして取り扱うには 他のシステムとのインターフェースがとれておらず、まさにブラックボックスである。

なお、Outlook Express からは、ファイルを選択して それをデスクトップやフォルダなどにドラッグアンドドロップすると、*.emlというファイルにして落としてくれる。
これは なつかしの MS-Internetmail との共通ファイルであり、ほぼ唯一の 標準ファイル化の方法である。

私は「Becky!」というメーラーを使っている。
私が使う「唯一のシェアウェア」であり、きっちりユーザー登録もレジストもしている。
ソフトハウスの経営者・しかもプログラマが シェアウェアを「買う」というのは 屈辱と敗北以外のなにものでもないが、それだけ素晴らしいメーラーなのだから しかたがない。

この Becky は、*.eml ファイルをかき集めて インポートする BKUtil.EXE が標準でインストールされるから、Outlook Express 以降をメーラーに使っている人は、Outlook Expressから「メールアイテムをドラッグアンドドロップで外に出して」「BKUtil.EXEでインポートする」という 方法を使えばいいだろう。
また Outlook97/98であっても、Outlook Express は Outlook97/98をインポートする機能があるから、いったんOutlook Express で吸い上げてやって、同様に Outlook Express で *.eml ファイルにしてやるとよい。

 

とにかく余計なことをしやがる OutlookExpress

Outlook Express は、ちまたで言われるほど 悪いメーラーではない。
使いこめば それなりに 使い物になる・むしろ秀作のメーラーだと 私は思う。

ただ、何が困るって...とにかく、レジストリを汚しまくる!

以前 メーラーをネタにした原稿を書いていたときに、途中で「Outlook Express は どうなんだろう?」とインストールしたとたん、MS-InternetmailやOutlookの待機レジストリが消失して 元に戻せなくなった。
メーラーに関する原稿の途中なのに、他のメーラーが使えなくなり、えらい迷惑を ぶっこかされるハメになったのだ。
結局 Windows95からの再インストールを余儀なくされたわけである。

インストールするだけで、デスクトップレベルまで レジストリ抵触し、さらに従来の MSインターネットツールを無効にしまくる。
まさにOutlook Express地獄である。
それだけソフトの作りに自信があるのだろうが、私のように インターネットの各種環境を並存させたがる人や、旧版のメーラーで充分に満足している ご年配の方々を 混乱に陥れること はなはだしい。

さらに うちの会社は、自動受注システム用のクッションメールサーバとして「Outlook」を使っているため、微妙なAPIが変わると たちまち システムがストップする。
よほどのことがない限り、OutlookExpressをインストールするのは避けたいものだ。

なお レジストリを汚しまくる現象は、OutlookExpress に限らず、NTSVのDNSやOfficeの一部製品にも見られる。
そりゃ 自分のトコで作ったOSなんだから、好き放題やっていいんだろうけど、人が不快に思うレベルまで それをやるから...そして それを止めるだけの社内システムを持たないという 構造的問題があるから...それが非難される土壌になってしまうのだ。

 

OutlookExpressなしでエクスポートできるか

一応、Outlookにも エクスポート機能はついており、*.MMFやら *.CSV へ「テキストメッセージ」のエクスポートはできることになっている。
だが、添付ファイルは どうなるのだ! 添付ファイルのエクスポートは大事じゃないか。

そこで 他のメールコンバートツールを追いかけてみたが、Outlook +コンバートソフト でコンバートできるものは 見つけられなかった。
それほど Outlookのデータ構造は ややこしいわけである。

コンバートツールが世の中にないなら 作るしかない。
現在、午前8:30。 NHK「すずらん」が終わったばかりだから、お昼過ぎには コンバートツールができるだろう。

 

Outlookシリーズのアイテム自動吸出しは可能か

Outlookシリーズのアイテムデータを 上品にコンバートする方法は三種類。

  1. バイナリファイルを解析して 純粋なデータコンバータを作る
  2. JetデータベースでISAMインターフェースを生成し MS-Exchangeを経由して取り出す
  3. MAPIを使ってOutlookと直接交信を行う

バイナリファイルの解析...ううむ、Warezするんじゃあるまいし、そんな何日もかかることはできない。許された時間は3時間しかないのだ。

では JETとISAMで Exchangeと交信するのはどうか。うむ、これが一番のような気がする...が、それは とんでもないことだった。
MS謹製のマニュアルには ISAMでExchangeと交信できますよ...と書いてはいるが、それは 受信トレイのExchangeというより、Exchangeサーバー のことらしい。
どうりで MS Exchange の ショートカットに「Exchange」ではなく「受信トレイ」と書いたわけだ。

MSDNの英文原書を読んでみたが、やはり そこでは Exchangeサーバーのことを「Exchange」と呼んでいる。
たぶん マニュアルの日本語化を担当した翻訳者の ケアレスミスだと思う。
ミスじゃないなら、そんなまぎらわしい表記はするな!!

じゃあ、Exchangeサーバを導入するか? ばかばかしい。
たかがデータコンバートで ドメイン共有やら、グループ設定やら、ユーザー新規登録などできるか!
なにより うちは UNIXネットワークなのだ!

 

結局、残るはMAPIだ。
Messaging Application Program Interface
なんと
MAPIは まっぴ と呼ぶらしい。爆笑したぜ、こいつぁよー。
はずかしいから エムエーピーアイ と私は呼ぶことにした。
例によって これも マイクロソフトが提唱する なんとか のひとつらしい。

もう その勝手に名前をつけて、世の中を混乱させて、しかも あたかも「うちが最初にやりました」と主張する体質は、嫌われるから やめたほうがいいと思うんだけどな、あたしゃ。

とにかく これは 各種メーラーとの共通交信インターフェースAPIで、世界標準らしいが、これに対応したメーラーは それを主張するマイクロソフトのメーラー以外で 見たことがない。
私が 知らないだけかもしれないけどな。

結局、まともに吸い出す方法は、このMAPIを使って 正面から、MS製メーラーと交信するよりないらしい。

とにかく作ってみる

そうこうしている間に 残り3時間を切った。
この段階で、言語選択は 迷わずVisualBASICである。
なんせ MAPIコンポーネントが標準で装備されている。
C++でスケルトンから書いているヒマはない!

基本的には

MAPISession1.DownLoadMail = False
MAPISession1.SignOn
MAPIMessages1.SessionID = MAPISession1.SessionID

MAPIMessages1.Fetch '←読むだけでもこれが必要

'受信トレイの中のメールのインデックス番号。5通あれば 0〜4 で選択できる
MAPIMessages1.MsgIndex = 0
'↑のインデックスで指定したメールの読みこみ
buf = MAPIMessages1.MsgNoteText

MAPISession1.SignOff

で Outlook やOutlookExpress のメールが buf に読めるらしい。
ううむ、世界標準を提唱するだけの事はあって なかなかカンタンだ。

読めるメールは受信トレイに入っているものに限定されているが、他のフォルダのアイテムであっても、受信トレイに移動すればよいのだから、けっこうイケてるかも。

そんなわけで

できたのがこれ。
NHK「すずらん」の午後の再放送が終わる前に完成したから、まあ 合格だな。
OutlookToBecky が正式名称だ。
名前を ひねっているヒマなどない。

【使用方法】

  1. 起動する
  2. 「受信トレイ変換」を押す
  3. コンバート後のディレクトリを指定する
  4. 受信トレイの内容がコンバートされ、 Outlook.mbx が生成されるので、Becky! の User0フォルダ なりにコピーする
  5. 一方で Outlookフォルダができているので、そのフォルダごと、User0フォルダなどの下にある Attach フォルダの中に Outlookフォルダごと コピーする 。(そこは2000年問題を彷彿とさせるような 数字フォルダの世界だが 気にするな)
  6. Becky! を再起動すると Outlook と書かれた メールフォルダが確認できる
  7. そのまま使ってもよいが ツール→インデックスファイルの再構築 を使って、インデックスをとったほうが絶対によい
  8. あとは 自分の好きな名前にメールフォルダの名称を変更してよい。他のメールフォルダと同様に使用できる。

【注意点】

まず 重大な問題だが、MAPIは メールの「受信日時」は取得できても、「送信日時」は得られない。したがって、「送信メール」を受信フォルダに入れてコンバートした場合、日付が表示されない。
これでは リプライなど「返信メール」が どのメールに対して出されたものかが わかりにくくなる。

そこで、 In-reply-to を使って スレッド化することにした。
こうすれば ある程度は メールのグループ化ができる。
(今回 通常スレッドと差別するために、Becky!の検索→関連メッセージ検索 においてのみ、この擬似スレッドを分類表示できるよう In-reply-to を工夫してある)

ただ これも あくまで「擬似スレッド」であるため、「あいまい」と「厳密」の2種類を選択できるようにした。

また 添付ファイルであるが、MAPIは 送信添付ファイルしか得られない...ことになっているが、今回はちょいとした裏ワザを使って、受信した添付ファイルも取りこんでいる。
だが ファイル名の再現まではできないので、コンバートした添付ファイルをBecky!の中で使うときは あとで適当にファイル名をつけて 別に保存してくれや。(←ダサいけど これがMAPIの粋な使い方の限界だ。もともとが上品なAPIなんだから しかたがねー!)

したがって、Outlook独特の「FAX画像埋め込み添付」など メール以外のアイテムをコンバートしようとすると、そこでコンバートを停止するようになっている。
埋め込みオブジェクトまで対応できるようにするのは、DDE通信やらAPIのスレッド化やらでたいへんだ。
そこまでやるなら カネ取るよあたしゃ。

ダウンロード:VBを持っている方→ OLTOBECK.exe

ダウンロード:インストーラ付きフルコンポーネントで落としたい方→oltobeck.zip

おわりに

お約束だけど、このツールを使った結果のいかなる損害も、あたしゃ知ったこっちゃない。

バージョンアップの予定はないから、「動きません」などの質問・障害報告も必要なし! 好きに使ってくんな。

当然 うちの会社はサポートしないし、Becky!のRimArtsに 「使い方」なんか質問したりしないでおくれ。
これを見てわからないなら、素直に OutlookExpress地獄にハマッたほうが まだマシだと思う(笑)

(99/06/29・山崎はるか)

 


Network Diamond Apricot - SOHKA.JSC

■メモエリアに戻る