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ソースを取得し、ハイパーリンクの中から添付ファイルのリンクだけを抽出することで一括でダウンロードできる簡易ソフト」を、当方で使わせていただくことはできないでしょうか?
大変恐縮ですが、何卒、よろしくお願い申し上げます。
コメントありがとうございます。
以前私が遭遇した状況とよく似ていますね。大変お困りのことと思います。
記事に書いた手法が今でも有効であれば、効率は悪いものの1件ずつ手作業でダウンロードすることは可能かと思います。
とはいえ件数が多いと途方もない作業量になります。そこで簡易ソフトを作ったのですが、ダウンロード以外の作業も結構な手間がかかるため、思ったより効率は上がりませんでした。
新しいメールを作成し、保存したいメールを添付(10件程度がMAXだったように思います)、
簡易ソフトを実行して添付ファイルへのURLを抽出し、そのURLへアクセスしてダウンロード。
ダウンロードが終わったら、また新しいメールを作成して添付ファイルを追加……という作業の繰り返しです。
埒が明かず、最終的には本当に必要なメールだけを吟味して保存することにして、その他の多数のメールは放棄しました。
さて、その簡易ソフトについてですが、現状そのままでお渡しするの難しいです(当方の職場環境に特化して作成したため、そのままでは他の環境では動きません)。
もし.Net Framework C#プログラミングに心得がおありでしたら、ご自身で手直しをしていただく前提で手元にあるソースコードを公開することは可能です。
ただし上述のとおりそこまで効果が期待できない上、手直しに必要な工数も考えると、管理者に対処してもらう(正攻法)か、必要なメールに絞って手作業で頑張った方が早いかもしれません。
そのあたりも考慮した上でなお簡易ソフトが必要であれば、幸運にも当時のソースコードは残っていましたので、その旨お返事いただければ幸いです。
琵琶 返信
ご返信ありがとうございます。
残念ながら私はVBAを多少かじった程度ですので、いただいたソースを当方の環境に合わせて書き換え、というのは私には難しそうです。折角ソースコードを探してまでいただいたのに、申し訳ございません。
ただ、昨日今日と試行錯誤した結果、OWAにも添付ファイルをまとめてダウンロードする機能が一応あることが分かりました。謎だったのはその機能があまりにも見つけにくいことで、添付ファイルとは全然関係ない操作をしたところ、一括ダウンロードのリンクがひっそり出現していたという…。
もしかするともっと普通にそのリンクを出す方法があるかもしれませんので、もう少し調べてみます。
一括ダウンロードを使うことで、メールを一通ずつダウンロードするよりは遥かに手間が省けましたが、やはりtakeru7mc様が試されたときと同様に制約があり、こちらの環境では添付ファイルの合計容量の上限が20MB程度にされているようでした。結局、何度も何度も新規メールを作成する作業を繰り返すことになりました。
あと、もう一つお伺いしたいのですが、takeru7mc様の方法でダウンロードして.emlにリネームしたファイルは、そのまま(手動で)Outlookにインポートできましたでしょうか?
私がダウンロードしたemlファイルは、直接開けばOutlookのスタイルで閲覧できるのですが、Outlook上にドラッグ&ドロップすると添付ファイルとして扱われてしまいました(受信トレイ内に新規フォルダを作ってそこに入れても上手くいきません)。msgファイルとして保存しなおせばOutlookにインポートできましたが。
明日以降、記事でご紹介いただいているVBScriptも試してみたいと思います。
とりあえず、数名の方のメールデータを取り出すところまで行いましたが、いやはや大変でした…。
しかしながらこちらのページがなければ、「諦めてください」で終了していたかもしれません。丁寧なご返信とあわせ、心より御礼申し上げます。