Outlook Web App (OWA) はMicrosoftのExchange Server 2010/2013で提供されるWebメールサービス。企業のメールとかでよく使われてるやつ。
Exchange Serverのメールは一般的には「Outlook」メーラーを使ってアクセスするが、OWAを使えばWebブラウザ経由でもアクセスできるようになっている。
ちなみにExchange Server 2016や最新のMicrosoft 365では「Outlook on the web」という名前で提供されている。
が、今回はOWAのみが対象のお話(というかon the webのほうは使ったことがない)。
会社都合でOWAしか使えない(まじくそ)
記事タイトルの通り、今回トライしたのは「OWAからメールデータを取り出す」ことだが、これはOutlookを使えば簡単にできる。メーラーを起動して、当該メールをファイルに保存ればいい。
ただ今回は会社の都合でメールクライアントのOutlookは使えず(Outlook経由でのアクセスは無効化されている)、OWAしか提供されていないのがネック。
というのも、OWAはあくまでもWebアクセス用の補助機能のようなものなので、OWAからバックアップを取ったりエクスポートする機能は存在しない。そのへんはOutlookをインストールしてそちらかどうぞってことらしい。でもOWAしか提供されてないんだよ!
じゃあバックアップ取れませんやん
まさにその通りでバックアップが取れない。詰んでる。はいさようなら。
で終わらせたいところだが、「過去のメール消えるからバックアップよろしく(方法があるかは知らんけど)」とかナメたことを言われていてそうそう簡単に諦められない。
で、探してみるとこれがまた方法がないこともないのである。インターネットの叡智は素晴らしい。ここにやり方が書かれているので紹介する。
1. OWA上で新しいメッセージを作成
2. (一旦下書き保存して)メッセージを新しいウィンドウで開く
3. メール一覧ペインから保存したいメールを選択する(複数選択OK)
4. 選択したメールを2.で開いたウィンドウにドラッグ&ドロップする
5. ドロップしたメールが添付ファイルとして追加されるので、右クリックして保存するかそのまま他のメアドに送信して取り出す
これでOKだ。OWA上でメールをドラッグ&ドロップすると添付ファイルとして追加できる機能を利用してダウンロードしてしまうなんて方法があるとは知らなかった。
取り出すのが面倒くさい
上記5.の手順で「他のアドレスに送る」のは機密上よろしくないのでそのまま自端末にダウンロードしたいのだが、一つずつ手で右クリックしてダウンロードするのはさすがに面倒くさすぎる。
そこでSHDocVwを使ってIEを操作することでOWAのHTMLソースを取得し、ハイパーリンクの中から添付ファイルのリンクだけを抽出することで一括でダウンロードできる簡易ソフトを作成した。これでひとつずつ手でやる手間は省けた。
本当はChromeでやりたかったけど、OWAのログイン状態を維持したまま(同じ接続セッションで)添付ファイルのリンクにアクセスするのが手間だったので「ログインは手動、あとはマクロ的にIEを操作してリンクを一括で開いてダウンロード」という折衷案で我慢した。凝ったプログラムを作る時間もないし。
(OWAサーバーがオレオレ証明書しかなく毎回接続時に証明書エラーが出てしまい別セッションにできないという制約もネックだった。ほんとクソ環境だ)
取り出した後も面倒くさい
ダウンロードしたファイルは拡張子のないファイルで保存される。
テキストエディタで中身を見るとメールデータがそのまま取り出せているようだが、RFCに則ってBASE64エンコードされておりそのままでは人が読むことができない。
一つずつデコードすることも考えたが手間がかかりそうだったので、ここはOutlookに一括インポートすることにした。
Outlookにインポートする手順
まずはファイルに拡張子.emlに付与する。好きなリネームソフトを使って一括でやってしまうとよい。
このemlファイルをそのまま開けばOutlookで読むことができるが、ファイルのままだと件名が見れないので目的のメールを探すのが大変。Outlookにインポートしてしまう方が探しやすいし読みやすいだろう。
一つずつ手でインポートするのは骨が折れるので、こちらで紹介されているVBScriptを使って一括でインポートしてしまうがのよい。
※この記事を書いていて気付いたけど上記事のコメント欄に改良版が貼ってあったり、githubに上がってたりしてた。もともとのでも十分だったけど。
あとはOutlookで閲覧しよう
Outlookにさえ入ってしまえばこっちのもの。そのまま閲覧できるのは当然として、エクスポートやバックアップも簡単だ。
OWAしか提供してないのにマシンにはOutlookアプリがインストールされているちぐはぐ感にモヤっていた(というかもうアンインストールしてしまおうかと思っていた)けど、消さずに残しておいてよかった。
あんまりスマートなやり方ではないけども、方法を探してみたら案外どんなことでも何とかなってしまうんだなぁという教訓と、まともなメール手段を提供しない会社はクソだなぁという感想が同時に生まれた瞬間だった。
琵琶 返信
takeru7mc様、はじめまして。突然のご連絡を失礼いたします。
「Outlook Web Appのメールデータを保存(バックアップ)する方法」の記事を拝見しました。
私の職場で現在、メールサーバーの移行作業が行われているのですが、その過程で「旧サーバーにはOWAでしか接続できず、新サーバーにはOutlookでしか接続できない」という状態に陥ってしまった人たちが出てしまいました。
(旧サーバーにOutlookで接続できれば話は簡単なのですが、それはほぼ不可能な状況です)
旧サーバーに残っているメールデータを取り出すにも、OWAではどうにもならないと思って途方に暮れていたところ、このtakeru7mc様の記事を見つけた次第です。
いきなりの不躾なお願いで恐れ入りますが、takeru7mc様の作られた「OWAのHTMLソースを取得し、ハイパーリンクの中から添付ファイルのリンクだけを抽出することで一括でダウンロードできる簡易ソフト」を、当方で使わせていただくことはできないでしょうか?
大変恐縮ですが、何卒、よろしくお願い申し上げます。
takeruから琵琶への返信 返信
コメントありがとうございます。
以前私が遭遇した状況とよく似ていますね。大変お困りのことと思います。
記事に書いた手法が今でも有効であれば、効率は悪いものの1件ずつ手作業でダウンロードすることは可能かと思います。
とはいえ件数が多いと途方もない作業量になります。そこで簡易ソフトを作ったのですが、ダウンロード以外の作業も結構な手間がかかるため、思ったより効率は上がりませんでした。
新しいメールを作成し、保存したいメールを添付(10件程度がMAXだったように思います)、
簡易ソフトを実行して添付ファイルへのURLを抽出し、そのURLへアクセスしてダウンロード。
ダウンロードが終わったら、また新しいメールを作成して添付ファイルを追加……という作業の繰り返しです。
埒が明かず、最終的には本当に必要なメールだけを吟味して保存することにして、その他の多数のメールは放棄しました。
さて、その簡易ソフトについてですが、現状そのままでお渡しするの難しいです(当方の職場環境に特化して作成したため、そのままでは他の環境では動きません)。
もし.Net Framework C#プログラミングに心得がおありでしたら、ご自身で手直しをしていただく前提で手元にあるソースコードを公開することは可能です。
ただし上述のとおりそこまで効果が期待できない上、手直しに必要な工数も考えると、管理者に対処してもらう(正攻法)か、必要なメールに絞って手作業で頑張った方が早いかもしれません。
そのあたりも考慮した上でなお簡易ソフトが必要であれば、幸運にも当時のソースコードは残っていましたので、その旨お返事いただければ幸いです。
琵琶 返信
ご返信ありがとうございます。
残念ながら私はVBAを多少かじった程度ですので、いただいたソースを当方の環境に合わせて書き換え、というのは私には難しそうです。折角ソースコードを探してまでいただいたのに、申し訳ございません。
ただ、昨日今日と試行錯誤した結果、OWAにも添付ファイルをまとめてダウンロードする機能が一応あることが分かりました。謎だったのはその機能があまりにも見つけにくいことで、添付ファイルとは全然関係ない操作をしたところ、一括ダウンロードのリンクがひっそり出現していたという…。
もしかするともっと普通にそのリンクを出す方法があるかもしれませんので、もう少し調べてみます。
一括ダウンロードを使うことで、メールを一通ずつダウンロードするよりは遥かに手間が省けましたが、やはりtakeru7mc様が試されたときと同様に制約があり、こちらの環境では添付ファイルの合計容量の上限が20MB程度にされているようでした。結局、何度も何度も新規メールを作成する作業を繰り返すことになりました。
あと、もう一つお伺いしたいのですが、takeru7mc様の方法でダウンロードして.emlにリネームしたファイルは、そのまま(手動で)Outlookにインポートできましたでしょうか?
私がダウンロードしたemlファイルは、直接開けばOutlookのスタイルで閲覧できるのですが、Outlook上にドラッグ&ドロップすると添付ファイルとして扱われてしまいました(受信トレイ内に新規フォルダを作ってそこに入れても上手くいきません)。msgファイルとして保存しなおせばOutlookにインポートできましたが。
明日以降、記事でご紹介いただいているVBScriptも試してみたいと思います。
とりあえず、数名の方のメールデータを取り出すところまで行いましたが、いやはや大変でした…。
しかしながらこちらのページがなければ、「諦めてください」で終了していたかもしれません。丁寧なご返信とあわせ、心より御礼申し上げます。
takeruから琵琶への返信 返信
お返事が遅くなり申し訳ございません。
OWAに一括ダウンロードする機能があったとは知りませんでした。
受信したメールならまだしも、下書きの状態で一括ダウンロードはできないだろうという思い込みがありました。
大変有用な情報をありがとうございます。
>そのまま(手動で)Outlookにインポートできましたでしょうか?
私が試した時は、.emlにリネームしたファイルをOutlook上にドラッグ&ドロップしてもインポートできませんでした。
そのため何とかインポートできないか試行錯誤した結果、記事で紹介したVBScriptにたどり着きました。
msgファイルとして保存し直せばインポートできるということも分かっていなかったため、とても苦労した記憶があります…。
ともあれ、琵琶様の環境でもメールを取り出すことができたようで本当に何よりです。
似たような境遇の方が(いない方が望ましいのですが)いらした時に役に立てるよう、ここでのやり取りも含めこのページに残しておきたいと思います。
琵琶からtakeruへの返信 返信
takeru様、こんばんは。
結果報告をずっと忘れておりました。失礼いたしました。
まず、一括ダウンロードの方法ですが、
(1) 新規メール画面を作成し、別ウィンドウ表示にする
(2) その別ウィンドウに、保存したいメールをドラッグ&ドロップで添付(複数選択で同時にドラッグ&ドロップ可能)
(3) 別ウィンドウを閉じる(注:メール添付後すぐにウィンドウを閉じようとすると、何か警告メッセージ的なものが表示される場合があります。その場合は少し間をおいてから閉じなおす)
(4) 「下書き」フォルダ内に保存された下書きメールを選択し、右ペインに表示
(5) その下書きメールを改めて別ウィンドウで開く
(6) すると別ウィンドウではなく、(4)で右ペインに表示した下書きメールの画面内に、添付ファイルを一括ダウンロードするためのリンクが出現する
もうOWAの環境が使えないために再確認することもできず、既に1か月ほど経過して記憶も薄れつつありまして、おかしいところや分かりにくいところがありましたら申し訳ありません。
なんでこんな裏技みたいな機能があるのか非常に謎ですが、あれこれ調べていたところ、もともとはOWAにも添付ファイルを一括ダウンロードする機能が存在していたようです。それがバージョンアップで無効化された…はずだったものが、漏れがあったということなのかもしれません。
さらにもう少し、効率的にメールをバックアップするための手順を書いておきますと、
・メールの「スレッド表示」をオフにする
・メールは「サイズ」でソートしておく
・一括ダウンロードの際、添付したメールは単一のZIPファイル内にまとめられて保存されるので、可能なら解凍ソフトを用意しておく
・新規メールの件名を、添付したメールが格納されていたフォルダ名などにしておくと、それがZIPファイルの名前になるので、後でリストアするときに分かりやすい
「サイズ」でソートするのは、添付できる合計のファイルサイズに上限があるためです。最初は大きいメールを一つずつ添付していって、添付に失敗したことを示すエラーが出たら次の新規メールを作って…という作業を繰り返すうちに、添付上限サイズが大体分かってきますので、以降は上記(2)の手順の際に、各メールのサイズを見ながら、どれくらいならまとめてドラッグ&ドロップしてもエラーが出ないのか、という見当が付くようになります。
また、ダウンロードしたZIPファイル内には、添付したメールが「(メールの件名).eml」というファイル名で格納されているのですが、同じ件名のメールを複数添付した場合、ZIPファイル内に同じ名前のファイルが複数存在するという状態になるようです。Windows標準のZIP展開機能では、これらのファイルを解凍時に区別してくれないため、可能であれば自動的に「(1)」「(2)」などの番号を割り振ってくれる解凍ソフトを用意しておくのがいいと思います。
ちなみに私の職場の環境にはLhaplusが入っていて、これですと同名ファイルに番号を自動で割り振ってくれるのは有難いのですが、盛大にファイル名が文字化けしました。文字化けしていても一応Outlookにリストアすることは可能でしたが、文字化けが原因かもしれないエラーが何回か出ました。
以上が私の行ったバックアップの手順です。
こうして書くとうまい方法があったように思われるかもしれませんが、仮にうんと手際よく作業が進んだとしても、1GB分をバックアップするのに1時間強、下手すれば2時間以上、という感じだったように思います。メールが大量に入っているフォルダではOWAの挙動がおかしくなり、まともにスクロールできずにイライラする場面もありました。バックアップ前後で比較することも難しいので、メールの数が多ければ多いほど、100%完全なバックアップは困難になるでしょう。他にまともなバックアップ手段があるなら、まったくお勧めできません。複数名のバックアップを行いましたが、もう二度とやりたくないです…。
かなり長くなってしまい恐縮ですが、OWAでお困りの方にとって、少しでもご参考になれば幸いです。
リストアについてはtakeru様がご紹介されているVBScriptを使った方法で、上記の解凍時の文字化けに起因すると思われるエラーが多少発生した以外は、ほぼ何も苦労なく済ませることができました。
あまりまとまっていない文章で恐縮ですが、もしお役に立つようでしたら、記事本文等でご自由に引用、再編集していただいて構いません。
どうもありがとうございました。
琵琶から琵琶への返信 返信
昨日の投稿内容ですが、
・新規メールの件名を、添付したメールが格納されていたフォルダ名などにしておくと、それがZIPファイルの名前になるので、後でリストアするときに分かりやすい
の部分を、
・保存するZIPファイルの名前を、添付したメールが格納されていたフォルダ名と同じにしておくと、後でリストアするときに分かりやすい
と訂正させてください。新規作成したメールの件名が自動的にZIPファイル名になるわけではなかったと思います。また、新規メール作成時にあらかじめ件名を「(フォルダ名)1」「(フォルダ名)2」などとしておくと、ZIPファイルを保存するときにそれをコピペすればいいので多少楽でした。
失礼いたしました。
takeruから琵琶への返信 返信
琵琶様
結果の連絡をくださりありがとうございます。
また、大変詳しい手順まで記載いただき感謝いたします。
(4)の下書き保存までは認識しておりましたが、下書きメールを別ウィンドウで開くことでダウンロードリンクが現れるとは存じ上げませんでした。よくぞ見つけてくださいました。
当方が認識していた手順よりもかなり作業短縮ができそうです。
残念ながら当方もOWAの環境がないため検証することは叶いませんが、似たような境遇の方に届くことを願っております。
あらためて、詳細をコメントくださりありがとうございます。