12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Power AutomateでOutlookメールをトリガー条件で絞り込む方法(OR・AND・件名フィルター)

12
Last updated at Posted at 2021-06-23

Power AutomateでOutlookメールをトリガー条件で絞り込む方法(OR・AND・件名フィルター)

Power AutomateでOutlookの「新しいメールが届いたとき(V3)」を使うとき、件名に AAA または BBB が含まれるメールだけでフローを動かしたい、というケースがあります。

このとき、トリガーの「件名フィルター」に複数キーワードをスペース区切りで入れても、期待したOR条件にはなりません。複数条件で絞り込みたい場合は、トリガーの設定にある「トリガー条件」を使うのが扱いやすいです。

件名フィルターだけでは複数条件を書きにくい

たとえば下のように、件名フィルターへ複数キーワードを入れても「AAAまたはBBBを含む」という意味にはなりません。

image.png

単純に「件名に1つの文字列が含まれるメールだけ」を拾いたいなら、Microsoft公式の手順どおり、詳細オプションの「Subject Filter」を使えばOKです。

一方で、次のような条件にしたい場合はトリガー条件のほうが向いています。

  • 件名に AAA または BBB が含まれる
  • 件名に 見積 が含まれ、かつ差出人が特定ドメイン
  • 件名に 広告 が含まれるメールは除外する
  • 件名が空ではないときだけ動かす

トリガー条件の設定場所

トリガーとなる「新しいメールが届いたとき(V3)」の右上メニューから、設定を開きます。

image.png

設定画面の「トリガーの条件」に式を入れます。

image.png

件名にAAAまたはBBBが含まれるときだけ起動する

件名をOR条件で判定する例です。

@or(
  contains(triggerOutputs()?['body/subject'], 'AAA'),
  contains(triggerOutputs()?['body/subject'], 'BBB')
)

1行で貼り付ける場合はこうです。

@or(contains(triggerOutputs()?['body/subject'], 'AAA'), contains(triggerOutputs()?['body/subject'], 'BBB'))

or() は、どちらか一方が true なら全体が true になります。Power Automateの式は AAA || BBB のような書き方ではなく、or(条件1, 条件2) のような関数形式で書きます。

大文字小文字を区別したくない場合

contains() は大文字小文字を区別します。英字を含む条件では、比較対象を toLower() で小文字にそろえておくと事故りにくいです。

@or(
  contains(toLower(triggerOutputs()?['body/subject']), 'aaa'),
  contains(toLower(triggerOutputs()?['body/subject']), 'bbb')
)

検索語側も変数などで渡す場合は、検索語にも toLower() をかけます。

@contains(toLower(triggerOutputs()?['body/subject']), toLower('AAA'))

条件指定の例

AND条件

件名に AAABBB が両方含まれるときだけ起動します。

@and(
  contains(triggerOutputs()?['body/subject'], 'AAA'),
  contains(triggerOutputs()?['body/subject'], 'BBB')
)

完全一致

件名が AAA と完全一致するときだけ起動します。

@equals(triggerOutputs()?['body/subject'], 'AAA')

特定キーワードを除外

件名に 広告 が含まれないときだけ起動します。

@not(contains(triggerOutputs()?['body/subject'], '広告'))

空ではないことを確認

件名が空でないときだけ起動します。

@not(empty(triggerOutputs()?['body/subject']))

件名と差出人を組み合わせる

件名に 見積 が含まれ、かつ差出人メールアドレスに example.com が含まれる場合の例です。

@and(
  contains(triggerOutputs()?['body/subject'], '見積'),
  contains(toLower(triggerOutputs()?['body/from/emailAddress/address']), 'example.com')
)

差出人などのキー名は、コネクタやトリガーのバージョンによって見え方が変わることがあります。うまく動かない場合は、実行履歴のトリガー出力を開いて、実際のJSONのキー名を確認してから式に反映すると確実です。

複数行に分けたトリガー条件はAND扱い

「トリガーの条件」に複数の式を別々の行で追加すると、基本的にはすべての条件を満たしたときだけ起動します。

たとえば、次の2行を別々のトリガー条件として追加した場合はAND条件です。

@contains(triggerOutputs()?['body/subject'], '見積')
@not(contains(triggerOutputs()?['body/subject'], '広告'))

「AまたはB」のようなOR条件にしたい場合は、1つの式の中で or() を使います。

件名フィルターとトリガー条件の使い分け

ざっくり、次の使い分けでよいと思います。

やりたいこと 使う場所
件名に1つの固定文字列が含まれるメールだけ拾う 件名フィルター
複数キーワードのOR条件にしたい トリガー条件
AND / OR / NOT を組み合わせたい トリガー条件
件名以外の項目も一緒に判定したい 標準フィルター or トリガー条件

トリガー後に「条件」アクションで分岐させる方法もありますが、その場合はいったんフローが起動します。最初から不要なメールでは起動させたくない場合は、トリガー条件で絞るほうが管理しやすいです。

添付ファイル条件の注意

「添付ファイルありのメールだけ」などは、可能ならトリガーの詳細オプションにある標準フィルターを優先します。

また、Office 365 Outlookコネクタでは、添付ファイルの内容をトリガーで含める設定にすると、添付が多いタイミングでタイムアウトすることがあります。添付の中身が必要な場合は、トリガーでは添付本文を含めず、後続の「添付ファイルの取得」系アクションで取得する構成も検討します。

参考

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?