Power AutomateでOutlookのトリガーやアクションから「メール本文の全体」を取得するのは簡単です。
例えば「新しいメールが届いたとき」トリガーアクションを作成すると、
後続のアクションで「動的なコンテンツ」としてメール本文が取得できるようになります。
そうして取得したメール本文を「Htmlからテキスト」アクションに入力すればテキスト化されたメール本文が出力できます。
しかし、Outlookのメール本文から任意の文字列を抽出するフローを作成するには、さらにいくつかステップを追加する必要があります。
ここから、エラーにならないための注意点なども含めて順にご紹介していきます。
その1:HTML・プレーンテキストの両形式で処理を分岐させる
いずれかの形式のメールしか取得しないのであれば必要ないのですが、混在する場合は処理を分岐させます。
これは、HTMLメールであれば先述のアクションでテキスト化しますが、元々プレーンテキストのメールを同じように処理してしまうと形が変わってしまい、後続でエラーになる危険があるためです。
具体的には、まず「条件」アクションを追加し、判定欄に動的なコンテンツリストからOutlookトリガーの「HTML」を入れます。
そうして下記のような判定条件にします。
これで「はいの場合」には、HTMLメールということなので「Htmlからテキスト」アクションでテキスト化します。
「いいえの場合」ではプレーンテキストなので、何もせず後続の処理へと進みます。
その2:メール本文の任意文字列を抽出する
いよいよ下拵えしたメール本文から任意の文字列を抽出します。
データ操作の「作成」アクションを追加し、下記の関数を適切な式にして設定することで実現します。
substring関数 | 検索対象文字列の指定開始位置から指定文字数分だけ取得する。 |
indexOf関数 | 検索対象文字列から検索文字列の開始位置を取得する。 |
add関数 | 引数同士を足し算する。 |
sub関数 | 引数同士を引き算する。 |
※式は、動的なコンテンツの隣の「式」タブに入力します。
例として、現在取得している本文(の要約)を下記とし、会社名である「xxx株式会社」を抽出したいとします。
この場合、例えば下記のように記述できます。(長くなるので、抽出元である本文は「本文」とそのまま記載します。実際は「動的なコンテンツ」より選択してください)
substring(本文,add(indexOf(本文,’会社名’),4),sub(indexOf(本文,’電話番号’),add(indexOf(本文,’会社名’),6)))
これは、「①本文の中から文字列”会社名”の開始位置を検索し、②そこに4を足した位置を文字列抽出の開始位置とし、③文字列”電話番号”の開始位置から’②の位置に2を加えたもの’を差し引いた結果を抽出文字数とする」という処理になっています。
ちなみに③の「2を加える」理由は、2行の改行が間にあるためです。
これが式としてPower Automateに正しく認識されれば、下記のように式が表示されます。
ここで注意しなくてはいけないのは、検索に使用する文字列が本文に複数ある場合です。
具体的にいうと、下記のようになっている場合です。
こういうケースでは、〜番目というところまで指定してあげます。下記の関数を使用します。
nthIndexOf関数 | 検索対象文字列から検索文字列のn番目の開始位置を取得する。 |
文字列「電話番号」のうち、2つ目の方を関数で使いたいので、下記のように記述します。色を濃くしているのが変更部分です。
substring(本文,add(indexOf(本文,’会社名’),4),sub(nthIndexOf(本文,’電話番号’,2),add(indexOf(本文,’会社名’),6)))
このように関数を駆使することで、本文から任意の文字列を抽出できます。
フローはこれで完成です。全体図は下記のようになります。
以上、最後までお読み頂きありがとうございました。
リモートやフレックスなど快適な働き方に興味のある方は↓の記事もおすすめです。
リモートやフレックスなど快適な働き方にフォーカスした転職サイトとは?