【UiPath】メールの絞り込みあれこれ

メールの取得処理で、メールの件数多いから絞り込みたい…

ってことはよくあると思います。

今回はgetOutlookMailMessagesアクティビティを使ったメール絞り込み方法について、

つまづいた点と解決策、参考サイトについてシェアします。


絞り込み方法

getOutlookMailMessagesアクティビティのプロパティの「フィルター」にいろいろと条件を書いていくのですが、書き方は2種類あります。

image.png


メールフィルター

通常の方法です。以下サイトが参考になります。

Outlookで受信したメールを操作してエクセルに転記する

メール取得処理のフィルタ設定について

例えば、指定の受信日以降のメールに絞り込みたい場合、

[ReceivedTime] >= 'mm/dd/yyyy'

と書きます。


DASL構文

SQLのような書き方でフィルタをかける方法です。

以下サイトが参考になります。

Outlook で検索条件を絞り込んでより良い検索結果を得る

アウトルックで添付ファイルを保存したい

例えば、添付ファイル付きのメールに絞り込みたい場合、

"@SQL=" & Chr(34) & "urn:schemas:httpmail:hasattachment" & Chr(34) & " = True"

と書きます。


詰まった点

指定の受信日以降、かつ、添付ファイル付きのメールに絞り込みたかったので、

以下のように書いたのですがメールが1件も取得できませんでした。

日付の書き方もmm/dd/yyyy形式で合ってるはずなんですが… 謎です。

image.png


結局InvokeCode使っちゃいます

手っ取り早くパフォーマンスに影響なく、かつメールを絞り込みたい場合はInvokeCode使ってます。

ただ、メールの抽出データがないとどうしようもないので、


  • getOutlookMailMessagesアクティビティで受信日From/Toで絞り込んだメールリストを取得


  • InvokeCodeでさらに絞り込み

の2段階構成とします。

getOutlookMailMessagesの取得データが大量にならない程度にデータ量を調整し、

細かい絞り込みはInvokeCodeで行うというわけです。

以下、指定の受信日以降、かつ、添付ファイル付きのメールに絞り込む例です。

まずは受信日で絞り込み。

image.png

InvokeCodeのコード

image.png

returnList = New List(Of MailMessage)()

Dim mail As MailMessage
For Each mail In mailList
If mail.Attachments.Count > 0 Then
returnList.Add(mail)
End If
Next

image.png


まとめ

メールフィルタ、DASL構文どちらでも絞り込みは可能ですが、場合によっては併用しないと期待通りの結果にならないこともあります。

コーディングが苦でなければInvokeCode使うのが手っ取り早いです。