[UiPath] 保存済み.msgファイルから本文やプロパティを取得する(VBA活用)
UiPathで「Save Mail Message」を使用してメールを.msg形式で保存する処理は一般的ですが、保存されたファイルを後から読み込んで、本文や送信日時などのプロパティを抽出する標準アクティビティは今のところ用意されていないようです。
ネット上では「Outlookを立ち上げてUI操作で開く」という手法も見かけますが、バックグラウンド実行などの安定性を考慮すると、コードで直接パースする方が確実です。今回はExcel VBAを用いて対応したので、その際の考え方をメモしておきます。
対応策:Excel VBAによる外部パース
今回は Invoke Code (VB.netやC#) ではなく、あえて Excel VBA を採用しました。理由は単純で、以下のメリットがあるためです。
- デバッグの容易さ: 外部ファイル(.msg)の読み込みは、参照設定やオブジェクトの挙動を確認しながら進める必要があるため、Excel上でステップ実行できるVBAの方が開発効率が良い。
- 実装のシンプルさ: 複雑な参照設定をUiPath側で管理するよりも、使い慣れたVBAコンポーネントとして切り出す方が、保守の面でも見通しが良い。
実装の考え方と、直面した課題
Outlookオブジェクトライブラリの OpenSharedItem メソッドを使用します。指定したパスの .msg ファイルをオブジェクトとして開き、必要な情報を取得する流れです。
1. Outlook.Application オブジェクトを生成 2. .OpenSharedItem(ファイルパス) でメールオブジェクトとしてロード 3. Body(本文)、SentOn(送信日時)、SenderName(送信者)などを取得 4. 取得した値をUiPath側に渡す
【苦労したポイント】
実際に実装してみると、取得できるプロパティに関するドキュメントが少なく、特定の.msgファイルによっては値がNULLになったり、予期せぬエラーで止まったりするケースがありました。特に古い形式のMSGや、特殊なエンコードが含まれる場合に挙動が不安定になるため、エラートラップを厚めに張り、取得可能なプロパティを一つずつ検証する地道な作業が必要になりました。
振り返り
Integration Service (IXP) や Document Understanding などの最新機能が充実してきている一方で、こうしたローカルファイルの地味で細かな操作が必要になる場面は依然として存在します。
「標準機能で用意されていない=できない」と判断するのではなく、VBAやC#など手持ちのスキルを組み合わせて、現場の要求に対して最短で安定した解を出すことが重要だと改めて感じました。





コメントを残す