Microsoft365のOutlookからPSTをエクスポートする手法
大分前のOutlookの場合、現在の受信済みメールをバックアップするのは容易いことでした。しかし、Microsoft365となったOutlookはデフォルトでIMAP4であり、PSTとしてバックアップ(メールボックスのファイル)するのはやや手間が掛かります。また他のサービスに移行するにあたって、管理者が一斉に全員分ExchangeからPSTをエクスポートするのは非常に難儀します。
そこで今回、Microsoft365のOutlookからPSTでエクスポートする方法を調査してみました。
今回利用するサービス
個人の場合は、Outlookのデスクトップ版でエクスポートを実施することが可能です。但し、現在のMcrosoft365は既にPOP3での受信は廃止されている為、IMAP4形式になっています。よって、ローカルにメールデータが無い為、このままではPSTとしてエクスポートが出来ません。
また管理者が扱えるExchange Onlineからのエクスポートはかなり手順が面倒です。人数が多い場合正直、手動でエクスポートはかなり大変なことになるのではないかと思います。
故にGoogle Workspaceなどの他のサービスにデータを持っていくGWMMOなどを使いたい場合には、この点が大きな障害として立ちはだかります。
※尚、Web版やOutlook(New)アプリからのエクスポートは出来ません。
個人でエクスポートする手法
手動でエクスポート
個人レベルでもっともベーシックというか基本的なエクスポート手法です。IMAP4で受信中の受信トレイをそのままPSTエクスポートを実行してしまうと、現在見えてるものだけしかエクスポートされず大半はExchange Online上に残ったままとなってしまいます。
よって以下のような手順でエクスポートする必要性があります。
- 受信トレイを右クリック=>フォルダーの作成をクリック
- 適当な名称を付ける(今回はexportmanと名付けました)
- 再度、受信トレイを開き、一番下にある「Microsoft Exchangeの詳細を表示するには、ここをクリックします」をクリックする(メールの数によって相当の時間が掛かります)
- 現在、Exchange Online上にある全てのメッセージが表示されたら、Ctrl+Aで全部のメールを選択させる
- 右クリックして移動=>フォルダへコピーをする
- コピー先のフォルダを指定する
- 相当数時間が掛かるので待つ(全部のメールがダウンロードされるため)
- 完了したら、Outlookのメニューからファイル=>開く/エクスポートをクリックする
- インポート/エクスポートをクリックする
- ウィザードのダイアログが出るので、「ファイルにエクスポート」を選択して、次へをクリック
- Outlookデータファイルのまま次へをクリックする
- エクスポートするフォルダでは2.で作成したフォルダを選択する。次へをクリックする。
- 参照でエクスポートファイルの保存先を指定する
- パスワード設定を問われますが何も入れずにOKをクリックします。
- 完了をクリックするとPSTファイルとしてエクスポートされる
これでオフラインで全メッセージがダウンロード出来たので、同様にフォルダ分けした他の項目や送信済みなども取得しておくと良いでしょう。またexportman以下に受信トレイや送信済みトレイのフォルダを作ってそこに格納し、1つのPSTファイルとしてエクスポートするのもオススメです。
また、同様の手順で共有メールボックスについてもエクスポートが可能です。
但しこの手法はいくつかの問題点を抱えています。
- ローカルPCのスペックが低い場合には、メモリ不足などに陥る可能性があります。
- 全部のメールをダウンロードさせる為、社内ネットワークのトラフィックをコントロールしていない場合には、障害が起きる可能性があります。
- かなり手順があるため、ITリテラシーの低い人の場合、PSTエクスポートに到達できない可能性があります。
- エクスポート出来るPSTファイルのサイズは最大50GBまでの制限があります。(デフォルトは上限10GB)
図:ここをまずはクリックして全部取得
図:出力先フォルダを指定する
図:エクスポート実施をする
PowerShellでエクスポートさせる
事前設定
本スクリプトを実行するには以下の設定をしておかないと、きちんと全メールをダウンロードして1つのPSTファイルにパッケージしてくれない可能性があります(やたらファイルサイズの小さなPSTファイルしか作られないパターン)
- Outlookを起動する
- メニューよりファイル=>情報タブを開く
- アカウントの設定をクリックし、アカウント名と同期の設定を開く
- Exchangeアカウントの設定にて、「Exchangeキャッシュモードを使用して、Outlookデータファイルにメールをダウンロードする」のチェックを外して、次へをクリックする
- 完了をクリックして、一旦Outlookを再起動する
なお、バックアップが終わりましたらこの設定を元の通り、チェックをオンの状態にしましょう。
図:この設定をしておきましょう
スクリプトを実行する
前述の方法はなかなか手順が多い点と、問題点にもあるようにITリテラシーが低い人の場合、操作が行き詰まってエクスポート出来ないケースもあるでしょう。故に、そういったケースに於いて情シスが最低限出力出来るようにしてあげられる手段がPowerShellになります。
- Outlookを起動しもし過去にOutlookデータファイルという項目が左サイドバーに残っていたら右クリック=>Outlookデータファイルを閉じるをクリックする
- Outlookを終了する。
- デスクトップにこちらのサイトのスクリプトを書き込んだPS1ファイルを配置する(ファイル名はtest.ps1としました)
- デスクトップに以下の内容を記述したtestman.batファイルを配置する
1PowerShell -ExecutionPolicy RemoteSigned .\test.ps1
※PS1ファイルを限定的に実行する為のコマンドです - Outlookが起動していない状態で、testman.batをダブルクリックして実行する
- 受信トレイなどのファイルがダウンロードされて、PSTファイルが出来上がる
図:Outlookデータファイルを閉じる
図:ファイルがダウンロードされる
VBAで出力までさせる
手動エクスポートの一歩手前までをVBAからOutlookを操作してメールを取得するものを利用することも可能です。作成したファイルはこちらからダウンロード可能。
挙動としては
-
受信トレイ直下にexportmanフォルダを自動作成
-
その中に受信トレイ、送信トレイ、送信済みアイテム、下書きの4つだけフォルダを作成。
-
それぞれのメールを受信してフォルダに格納
あとはこのexportmanフォルダを手動でPST出力すればオッケーという仕様です。コードは以下の通り。
※前述のPowerShellで紹介している事前設定をおかないとコピー出来ませんので要注意。
※事前バインディングなので事前にVBAの参照設定でMicrosoft Outlook XX.X Object Libraryにチェックを入れておく必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
'メールを取得してコピーするメイン関数 Public Function copyOutlookPST() '変数を宣言 Dim dummyarr Dim lastrow As Long 'dummyシートの全データの範囲指定 With ThisWorkbook.Worksheets("target") 'データのレコード数を取得する lastrow = .UsedRange.Rows.Count 'データの範囲を指定して配列で取得する dummyarr = .Range("A2:A" & lastrow) End With 'Outlook操縦用の変数宣言 Dim outlookapp As New Outlook.Application Dim oNamespace Dim oFolder Dim basefolder Dim subfolder Dim targetfolder Dim itemman Dim copyobject '変数を初期化する Set oNamespace = outlookapp.GetNamespace("MAPI") Set oFolder = oNamespace.GetDefaultFolder(olFolderInbox) '受信トレイ下に作成する Set basefolder = oFolder.Folders.Add("exportman") 'リストを取得してoutlookを操縦する Dim targetname As String For i = LBound(dummyarr, 1) To UBound(dummyarr, 1) 'targetnameを取得する targetname = dummyarr(i, 1) 'basefolderにサブフォルダを作成する Set subfolder = basefolder.Folders.Add(targetname) 'コピー元フォルダを指定 Select Case targetname Case "受信トレイ" Set targetfolder = oNamespace.GetDefaultFolder(olFolderInbox) Case "送信トレイ" Set targetfolder = oNamespace.GetDefaultFolder(olFolderOutbox) Case "送信済みアイテム" Set targetfolder = oNamespace.GetDefaultFolder(olFolderSentMail) Case "下書き" Set targetfolder = oNamespace.GetDefaultFolder(olFolderDrafts) End Select 'コピーを実行する Set itemman = targetfolder.Items For Each objItem In itemman 'コピー作成 Set copyobject = objItem.Copy ' アイテムのコピーをコピー先フォルダーに移動 copyobject.Move subfolder Next Next '終了処理 Set basefolder = Nothing Set oFolder = Nothing Set oNamespace = Nothing Set subfolder = Nothing Set copyobject = Nothing Set itemman = Nothing End Function |
あとはこれにリボンでもつけてあげればユーザにとってはワンクリックで全データを取得できます。また、このあたりのメソッドを使えばPSTファイルを作って、その中にエクスポートも出来るのではないかと思います。
図:無事メール全部取得できた
管理者がエクスポートする手法
注意点
PowerShellにてExchangeからPSTをエクスポートするコマンドとして、New-MailboxExportRequestがよく紹介されているのですが、こちらのコマンドはExchangeのオンプレ版向けのコマンドであって、Microsoft365で利用してるExchange Onlineでは利用することが出来ません。
他のブログ等でこれらが明記されていなく、Exchange Onlineで実行してみたけれどうまく動かないということがありますので要注意です。
電子情報開示エクスポートツールを利用する
管理者が手動操作で対象ユーザのメールボックスをPSTで入手する手段として、Exchange Onlineでは電子情報開示エクスポートツールが唯一の手段となります。但しこの作業をする為の事前準備が非常にややこしい。
役割を追加する
エクスポートを行うにあたって、役割の追加という作業が必要です。以下の手順で追加をします。
- Microsoft Purviewを開く
- 左サイドバーより、ロールとスコープを開き、アクセス許可をクリックする
- Microsoft Purviewソリューションの中の「役割」をクリックする
- 「eDiscovery Manager」を探して、クリックする
- 右サイドバーの上にある編集をクリックする
- 電子情報開示マネージャーの管理の画面になる
- 次へをクリックする
- 電子情報開示管理者の管理にて、ユーザの選択をクリックする
- ここで追加するユーザはこの機能を許可する「管理者」となります。次へをクリックする
- 最後に、保存をクリックして完了。
図:役割を追加する画面
図:管理者を選択する
検索を開始する
このツールは本来、電子情報開示用のツールであるため、PSTファイルは入手が出来ますが、この事前準備がかなり面倒です。とはいえ利用する機会が別でもあると思われるので、この機会にセットしておくのも良いでしょう。
- Microsoft Purviewを開く
- 左サイドバーのソリューション以下にある「コンテンツの検索」をクリックする
- 新しい検索をクリックする
- 名前は適当に入力する。次へをクリックする。
- 特定の場所にて、Exchangeメールボックスのスイッチをオンにする
- 右側の「ユーザー」をクリックする
- エクスポート対象とするユーザにチェックをいれる。次へをクリックする。
- クエリビルダーの画面になりますが、特になにも指定せずに次へをクリックする。
- 最後に送信をクリックする
- 完了をクリックして終了。
これで、対象の検索が開始されて、状態がStartingとなります。
図:コンテンツ検索から開始する
図:Exchangeを対象にする
実際にエクスポートを実行する
さて、検索の開始で指定したユーザの情報がコンテンツの検索にてステータスが「Complete」になったら、ダウンロードが可能になります。
- Purviewの左サイドバーからコンテンツの検索をクリックする
- Completeになってるのを確認したら、対象の検索のレコードをクリックする(ユーザによっては相当数時間が掛かる)
- 右サイドバーが開くので、下の操作=>結果のエクスポートをクリックする
- 出力オプションが色々とでますが、特に何も変更せずにそのままエクスポートをクリックする。
- ジョブが作成されましたと出たらOKをクリックする
実はこの段階ではまだPSTファイルの生成をするだけで、ダウンロード自体はまだ出来ません。
図:これでエクスポートが開始できる
Edgeに拡張ツールを有効化する
ファイルをダウンロードするその前にMicrosoft Edgeに対して機能を有効化する必要があります。この作業は1度だけ行えばオッケーです。但し、Chromeでは出来ないのでEdgeを利用する必要があります(どうしてもChromeという場合はこちらの拡張機能が使えるらしい・・・)
- Edgeを起動する
- URL欄に「edge://flags/#edge-click-once」を入力する
- 「ClickOnce Support」を見つけて、Enabledにし、 再起動をクリックする
これで、Edge側の準備はオッケーです。引き続き以下の作業をします。
- Microsoft Purviewを開く
- 左サイドバーのソリューション以下にある「コンテンツの検索」をクリックする
- コンテンツの検索上部にある「エクスポート」をクリックする
- 前述でリクエストしたエクスポートのレコードをクリックする
- 結果のダウンロードがクリック出来る状態ならば、先に進めるのでクリックする
- このファイルを開きますか?と出てくるので、「開く」をクリックする。
- 初回だけ警告画面が出るので、指示に従ってツールをインストールします。
- 自動的にeDiscover Export Toolが起動する
これでツールのインストールは完了です。一旦、起動したツールは閉じてしまいます。
図:Edgeでフラグを有効化する
図:ツールのインストール
エクスポートツールを利用する
これでエクスポートする準備がすべて整いましたので、いよいよPSTエクスポートを実行します。
- Microsoft Purviewを開く
- 左サイドバーのソリューション以下にある「コンテンツの検索」をクリックする
- コンテンツの検索上部にある「エクスポート」をクリックする
- 前述でリクエストしたエクスポートのレコードをクリックする
- 右サイドバー中段くらいにある「エクスポートキー」をコピーしておく
- 一番上の「結果のダウンロード」をクリックする
- ダイアログが出たら「開く」をクリックする
- eDiscovery Export Toolが起動する
- 5.のエクスポートキーを貼り付ける
- ダウンロードする場所を指定する
- 開始をクリックする
- ファイルのダウンロードが開始される。完了したらCloseをクリックする
デフォルトだと最大1つのPSTファイルは10GBまで。コレ以上になると分割されてしまいます。上限値を引き上げる場合には次項のレジストリの修正が必要になります。
ダウンロードされるとフォルダができあがっており、中を掘り進めると、Exchangeというフォルダがあるので開くとPSTファイルが出来上がっています(エクスポート対象として指定したユーザのメアドがファイル名になっています)。
図:エクスポートキーを取得する
図:開示ツールを開始する
図:PSTファイルがやっと手に入った
エクスポートサイズを変更する
レジストリにキーを作成することでこのツールのPSTエクスポート上限値を変更することが可能です。変更することで指定の値までは分割されずに出力されます。以下は20GBで指定した場合の事例になります。
- レジストリエディタを起動する
- 以下のエントリーを開く
1HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ - 上記のキーで右クリックして新しいキーを作成する
- Exchangeと入力して保存する
- 同じ要領で、「Client\eDiscovery\ExportTool」といった入れ子の構造になるようにキーを作成していく
- ExportToolのキーを選択して右パネルで右クリック=>文字列値を作成する
- 文字列値の名前は「PstSizeLimitInBytes」を指定する
- ダブルクリックで開いて、21474836480を入力して保存する
- 再起動すると適用される
図:レジストリの編集中の様子
Outlookに読み込ませてみる
ようやく手に入れたPSTファイルですが、どんな構造になってるのか?ということでOutlookにファイルを読み込ませてみたいと思います。
- Outlookを起動する
- ファイル=>開く/エクスポートタブを開く
- Outlookデータファイルを開くをクリックする
- PSTファイルを指定する
- 左サイドバーの一番下にメアドとしてデータが展開される
- 中にあるメアド=>インフォメーションストアの先頭を開くと受信トレイなどが格納されていてオフラインで見ることが可能になってる。
インポートを実行して取り込むことも可能です。
図:PSTファイルの中身を確認する
雑感
管理者側で一括でまとめてダウンロードみたいな事は出来ないようです。そういったことが出来るサードパーティツールはあるものの、なかなか試そうという気にはなり難い。故に多数のユーザと多数のファイルがある場合にPSTをバックアップするとなるとかなり大変なことになるかもしれません。
Google Workspaceへの以降の場合はGoogle Workspace MigrateやGWMMEなどのサーバサイドツールがあるものの、こちらもなかなかいい金額になる可能性があります。
一方、GWMMOの場合はユーザサイドでPSTファイルを自分で出力してそれをアップロードするといった手法になるため、管理者は楽かもしれませんが、アップロードするにあたっては、ネットワークトラフィックが逼迫しないように実行するユーザをグルーピングして計画的に実行するなどの対処が必要になります。
GWMMO検証
ここまでの段階で、手元にGoogle側に持っていきたいPSTファイルが用意できてるかと思います。このPSTファイルを持ってして、GWMMOで自身のGoogleアカウントに接続しインポートすることが可能です。
インストール
GWMMOはインストールするPCにOutlook2003以上のクライアントが入ってる必要があります。でなければインストールそのものが出来ません。
また、インストーラはこちらからダウンロードできますが
-
ユーザが個人でインストールして起動するバージョン(exeバージョン)
-
ADなどを使って管理者が配布してインストールするバージョン(MSIバージョン)
の2種類がありますので要注意。
Outlookクライアントにプロファイル等登録はなくても問題ありません(Microsoft365の場合は利用しません)。インストールはダブルクリックして、そのまま指示に従えば、スタートメニューに登録されます。インストール先のパスは「C:\Program Files (x86)\Google\Google Apps Migration」となります。
図:インストール先
図:スタートメニューに登録される
PSTファイルからインポート
Outlook2003を用意してますが、アカウント情報等一切入っていない状態で実施しています。この状態で以下の手順で起動してみます。
-
GWMMOを起動する
-
自分のGoogle Workspaceアカウントでログインする
-
リクエスト要求が来るので許可をクリックする
-
PSTファイルからをクリックして、入手しておいたPSTファイルを指定する。次へをクリックする。
-
移行するデータ対象にチェックを入れたり、期間を指定して次へをクリックする
-
移行が開始される
あとは移行完了を待つだけ。ネットワークの速度やPCの処理能力に大きく依存する為、必ずしも同じファイルであっても、完了までの時間は相当変わる。
図:ログイン画面
図:認証を許可する
図:PSTファイルを指定する
図:移行対象を指定する
図:移行中の様子
実施してみた
実施時間とトラフィック
以下のようなデータの入ってるPSTファイルを実際にGWMMOで実施してみた
- カレンダー:125件
- メール:979件
ファイルサイズ的には182MB程度の小さなPSTファイルです。これを自身のGoogle Workspaceに接続してインポートを実施してみました。自身の家の回線速度は以下のような感じです(色々作業しながらの計測なので実際にはもっと早い)。
図:自宅の回線速度
さて、この状態で完了までどれくらい掛かったのか?というと、思ってる以上に掛かっています。およそこのデータ量で、40分/1000件程度掛かっています。なので、5000件あるとなると想定では3時間30分程度/1名掛かるのではないかと思います。
また通信トラフィックについてはtcpmonで計測すると、1つの送信で4Mbps程度。小さいものはちょこちょこといった感じです。
図:tcpmonで計測
移行結果
実際にインポートしてみた結果が以下の通り。Gmailの場合はラベルで階層が作られて、その中に全部入ってる状況になっています。また、カレンダーの場合については新しいカレンダーが作成されてそれぞれが移行されているといった状況になっています。オリジナルのものに混ざるようなインポートではありません。
図:Gmailはラベルで階層表現
図:新しいカレンダーとして取り込み
関連リンク
- Outlook 2019 メールデータを保存する方法(IMAP)
- OlDefaultFolders 列挙 (Outlook)
- 【メール移行手順を解説】Outlook から Google Workspace の Gmail にデータ移行する方法とは?
- ps-export-outlook-to-pst.ps1 - Github
- Office 365からPSTファイルを効率的にエクスポートする方法
- Exchange Server の .pst ファイルにメールボックスをエクスポートする手順
- PSTファイルのエクスポート方法
- Microsoft Edge で電子情報開示エクスポート ツールを使用する
- Exchange Online(Microsoft 365)の認証方式を基本認証(POP/IMAP)から先進認証(OAuth 2.0)へ設定変更する方法を教えてください。
- Powershellを利用してExchange Onlineのコマンドを使用する方法
- PowerShell で Exchange Online を操作する 初回設定と7つの使用例
- Exchange メールボックスのエクスポートについて
- Officeをエクスポートする方法 365 PSTへのメールボックス: ステップバイステップガイド
- 指定した日付以降に更新された送受信メールや連絡先を PST にエクスポート/インポートするマクロ
- VBAでoutlookのPSTファイルExportを自動化したい
- IMAPをPST形式にエクスポートするにはどうすればよいですか? 素早く簡単なソリューション
- PowerShell のスクリプトが実行できない場合の対処方法
- PowerShell を使用して Microsoft 365 メールボックスを PST にエクスポートする