Outlook からエクスポート
インターネット黎明期 (1995 年ぐらい?) から生き残っている Microsoft 製のメーラーの中で、異彩を放っているのが Outlook です。
メールデータの保管方法という観点からみると:
Outlook Express
- Outlook Express は dbx という独自データベースを採用。
- dbx は 2GB を超えると壊れてメールデータが無くなるという重大な不具合があり、騒ぎになりました。
- dbx は解析が成功しているようで DbxRescue という有名なツールがあります。
Windows Live メール
- Windows Live メールではデータベースに ESE を採用しています。ESE は ISAM エンジンの一種であり、OS のコンポーネントでもあるから信頼性が高いです。
- データベースとは別に
.eml
ファイルを保存しています。 -
実際のフォルダー階層にそって保存していることから、メーラーの移行は簡単にできます。 メーラーから見えるフォルダ階層と、ファイルシステムのフォルダ階層は異なることがあります。フォルダ作成後の「フォルダ名の変更」「フォルダの移動」操作は、データベース内の情報が書き変わるのみで、ファイルシステムのフォルダ階層には反映されませんでした。.eml
ファイルのみを用いてメーラーを移行する際には注意が必要です。
Outlook
- Outlook は PST という独自のストレージフォーマットを採用しています。
- ファイル形式の仕様は公開されているのですが… 厄介なのはメールのデータ構造が
.eml
ベースではないという点です。 - メール本文は HTML ではなく RTF で保存しています。
- RTF の書式で進化を続ける HTML のすべてを表現できるはずもなく、結局 RTF の中に HTML も含められるという仕様にして対応している模様です。
- その変態 RTF を完璧にレンダリングできるのは Outlook や Word ぐらいです。HTML 形式の
.eml
への変換は容易ではなく、情報の損失が発生する可能性があります。 - RTF から HTML を復元する方法についての、技術的なドキュメントを見つけました。
- 参考までに RTF のサンプルです。
-
.pst
ファイルを読み取りできるライブラリがあります。有志の方が開発されたオープンソースのものです。ほかにも存在すると思いますが、ひとまず私が動作確認したものをリストします:- C/C++
- Ruby
- Node.js
- C#/.NET
-
.pst
ファイルにはバージョンがあります。(※この項は何度か編集有)- Outlook 以外のソフトウェアで開く際には、対応しているかどうか確認した方が良いでしょう。
- 10 ~ 11 バイト目の値で判定します。この 3 つ以外にも存在します:
-
0x0e
= PST, ANSI format, 512 bytes block, 32-bit id&pointer // PST は POP3 専用 -
0x17
= PST, Unicode format, 512 bytes block, 64-bit id&pointer -
0x24
= OST, Unicode format, 4096 bytes block, 64-bit id&pointer, zlib support // OST は IMAP 専用
-
- ANSI format と Unicode format とでは、一部の構造体の形式が異なります。例: [MS-PST]: HEADER | Microsoft Learn
- 文字列プロパティーのエンコード (ANSI or Unicode) については、各々のプロパティーが持っている型の値 (Unicode = 0x001F PtypString, ANSI = 0x001E PtypString8) で判別します。
- ANSI 文字列が使用しているコードページ番号 (例: CP932 など) を確実に知る方法は不明です。
- Outlook は
.pst
ファイル内のメール・連絡先・予定などをファイルへ出力しようとするとき、アイテムごとに.msg
ファイルを出力します。-
.msg
ファイルは 複合ファイル です (zip のような、ファイル内にフォルダ階層があるもの)。 -
.doc
/.xls
/.ppt
など Microsoft Office で採用されている、なじみ深いファイル形式です。 -
.msg
ファイルを見る- 7-Zip で
.msg
ファイルの中身を見ることができます。例: https://user-images.githubusercontent.com/5955540/124115327-a1de6680-daa8-11eb-8b77-39dbaf7d415a.png - msgreader_demo 、 使用例
- 7-Zip で
-
-
.msg
ファイルを読み取りできるライブラリです。
そういう訳で Outlook からの脱出にあたって、役立つと思われるツールを紹介いたします:
Outlook Export Tool
Thunderbird
Thunderbird 58 以上で ツール
→ 設定とデータのインポート
→ メールボックス
→ Outlook
次へ
をクリックすると、作業完了まで UI がフリーズします。気長に待ってください。
ローカルフォルダー
の Outlook インポート
にあります。
こちらは、真偽不明の情報です。
Thunderbird のインポート手順を用いるには、Thunderbird バージョン 38 およびそれ以降のバージョンでは Outlook と Eudora 向けのインポートウィザードが無効化されているため、古いバージョンの Thunderbird を使用する必要があります。
Thunderbird への移行 | Thunderbird ヘルプ
技術的な側面
ソースコードの MapiApi.cpp をサラッと読みました。
MAPILogonEx
からの IMAPISessionで、ガチの MAPI を叩いています。
Outlook へインポート
逆に「これから Outlook を使いたいので、他のメーラーからデータを引っ越しする」ことを想定して、ツールを探してみました。
Windows Live Mail
エクスポート機能で、Outlook にメールをエクスポートする機能があります。
ファイル
→ 電子メールのエクスポート
→ 電子メール メッセージ
を選択します。
Microsoft Exchange
を選択します。
プロファイルを選択するようになっている場合は尋ねられます。
複数のフォルダーを選択する場合は、Ctrl 押下のマウス左クリックで On/Off 切り替えです。
Outlook の Outlook データ ファイル
にできるようです。
IMAP4 server 経由
mozillaZine の Import .pst files より。
IMAP4 サーバー (例えば hMailServer) を経由して、メールデータを移行する方法があります。
失敗例: 受信トレイへドロップする
方法:
-
.eml
ファイルを受信トレイ
へドロップする。
結果:
- 新規メールの作成画面が表示されて、
.eml
ファイルが添付されました。
失敗例: フォルダーへドロップする
方法:
-
.eml
ファイルを受信トレイ
以外のフォルダーへドロップする。
結果:
- フォルダーにメールは追加されました。
- しかしプレビューには適さないようです。
- プレビュー画面での表示:
このファイルのプレビューを表示できません。このファイル形式のプレビューアーがインストールされていません。
- ダブルクリックした際のプロンプト表示:
ファイルを開く前に、ファイルが信頼できる所からのものであることを確認してください。
- プレビュー画面での表示:
msg → eml ファイル
msg
(Outlook が主に扱う) ファイルから eml
(一般的なメーラーで扱う RFC822 形式) に変換する方法について検討します。
pst
(Outlook が主に扱う) ファイルも出て来ますが「pst
ファイルは msg
ファイルが沢山入っているもの」と考えれば分かりやすいと思います。
(2024/08/15 追記)
3 層 (NDB 層 / LTP 層 / Messaging 層) 構造のデータベースです。参考:
- pst-parser/README.md at f67ce44b586f54ca97979f77febef8e561bf04bf · IJMacD/pst-parser
- ruby-msg/README.md at 10994d9f5d580de62b8488e43b104ddedf37f7e8 · HiraokaHyperTools/ruby-msg
(2022-11-21 追記)
.msg
ファイルにはメール以外のデータ形式で格納している場合があるようです。具体的には連絡先、予定などです。
7-Zip などで .msg
ファイルの中身を確認できるのであれば __substg1.0_001A001E
をメモ帳で開くと MessageClass を確認できます。 IPM.Note
であればメールです。
参考: Item Types and Message Classes | Microsoft Learn
連絡先が格納されているのであれば msg → vcard 変換の方が適切と思われます。
予定が格納されているのであれば msg → iCal 変換の方が適切と思われます。 (2022/11/26 追記)
ruby-msg
Google Code Archive - Long-term storage for Google Code Project Hosting.
紹介サイト
mfcmapi
Releases · stephenegriffin/mfcmapi
紹介サイト
libpst
libpst Utilities - Version 0.6.76
紹介サイト