Power AutomateでOutlookメールをトリガー条件で絞り込む方法(OR・AND・件名フィルター)
Power AutomateでOutlookの「新しいメールが届いたとき(V3)」を使うとき、件名に AAA または BBB が含まれるメールだけでフローを動かしたい、というケースがあります。
このとき、トリガーの「件名フィルター」に複数キーワードをスペース区切りで入れても、期待したOR条件にはなりません。複数条件で絞り込みたい場合は、トリガーの設定にある「トリガー条件」を使うのが扱いやすいです。
件名フィルターだけでは複数条件を書きにくい
たとえば下のように、件名フィルターへ複数キーワードを入れても「AAAまたはBBBを含む」という意味にはなりません。
単純に「件名に1つの文字列が含まれるメールだけ」を拾いたいなら、Microsoft公式の手順どおり、詳細オプションの「Subject Filter」を使えばOKです。
一方で、次のような条件にしたい場合はトリガー条件のほうが向いています。
- 件名に
AAAまたはBBBが含まれる - 件名に
見積が含まれ、かつ差出人が特定ドメイン - 件名に
広告が含まれるメールは除外する - 件名が空ではないときだけ動かす
トリガー条件の設定場所
トリガーとなる「新しいメールが届いたとき(V3)」の右上メニューから、設定を開きます。
設定画面の「トリガーの条件」に式を入れます。
件名に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条件
件名に AAA と BBB が両方含まれるときだけ起動します。
@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コネクタでは、添付ファイルの内容をトリガーで含める設定にすると、添付が多いタイミングでタイムアウトすることがあります。添付の中身が必要な場合は、トリガーでは添付本文を含めず、後続の「添付ファイルの取得」系アクションで取得する構成も検討します。


