ADVERTISEMENT

【Power Automate】メール本文から値を抜き出したい場合の作り方

【Power Automate】メール本文から値を抜き出したい場合の作り方
🛡️ 超解決

Power Automateでメール本文から特定の値を抜き出したい場面は多いです。たとえば、お客様からの問い合わせメールから注文番号を取得したり、システム通知からエラーコードを抽出したりするケースが挙げられます。しかし、メール本文は自由形式であるため、安定して値を抽出するには適切な設計が必要です。本記事では、Power Automateでメール本文から値を抜き出す具体的な作り方を、失敗例や比較表を交えて解説します。

【要点】この記事で確認すること

  • 最初に見る場所: メール本文の形式(テキストかHTMLか)と、抽出したい値の出現パターン(固定文言の後ろや特定の記号で囲まれているか)を確認します。
  • 切り分けの軸: 正規表現アクションを使うか、テキスト解析アクションを使うか、またはJSON解析が可能かどうかで方法を選びます。値が構造化されていればJSON、単純な文字列なら正規表現が有効です。
  • 注意点: 会社PCのPower Automateでは、標準コネクタ以外にカスタムコネクタが必要な場合があります。また、メール本文の改行や余分な空白が想定と異なることがあるため、テスト時に実データで確認してください。

ADVERTISEMENT

メール本文から値を抜き出す代表的なパターン

メール本文から値を抜き出すシチュエーションは、定型メール(テンプレート)と自由記述メールに大別できます。定型メールでは固定の文言や記号が使われるため正規表現が有効です。一方、自由記述では規則性が乏しいため、キーワード前後の文字列を取得する方法を検討します。

定型メールからの抽出(例:お問い合わせ番号)

多くの業務システムは、メール本文に「お問い合わせ番号: 12345」のように固定フォーマットで番号を記載します。この場合、正規表現アクションを使って「お問い合わせ番号:\s*(\d+)」のようなパターンで数値を抜き出せます。Power Automateの「Compose」アクションや「Apply to each」と組み合わせると、複数の値を同時に取得できます。

表形式のデータ抽出

メール本文に簡易的な表(タブやカンマ区切り)が含まれる場合、テキストを行に分割し、さらに列に分割する方法で値を抽出します。Power Automateには「選択」アクションや「フィルター配列」アクションがあり、split関数や正規表現を組み合わせて構造化データを生成できます。ただし、表の形式がずれていると誤抽出の原因になるため注意が必要です。

複数条件の組み合わせ

抽出したい値が複数のキーワードの近くにある場合、たとえば「注文番号:」と「金額:」の両方を一度に抜き出したいケースがあります。このときは、メール本文全体を一度に処理するよりも、1つの正規表現でグループ化して取得する方が効率的です。たとえば「注文番号:\s*(?<order>\d+).*?金額:\s*(?<amount>\d+)」のように名前付きキャプチャグループを使うと、後続のアクションで変数名で参照できます。

実際のフロー作成手順(Outlookトリガー+解析アクション)

ここでは、Outlookの新しいメールが届いたときに、本文から「お問い合わせ番号」を抽出してファイルに保存するフローを例に、手順を説明します。

  1. トリガーの設定: Power Automateで「新しいメールが届いたとき(V3)」トリガーを追加し、対象のメールボックスとフォルダーを指定します。
  2. 変数の初期化: 「変数を初期化する」アクションで、本文を格納する文字列変数(例:bodyText)を作成します。値に「triggerOutputs()?[‘body/body’]」を設定します。HTMLメールの場合はトリガー出力の「body」プロパティにHTMLが入りますが、テキストのみ必要な場合は「bodyPreview」を使うことも検討します。
  3. 正規表現アクション: 「条件」や「Apply to each」の代わりに、サードパーティ製コネクタの「正規表現」アクション(例:Encodian や Plumsail)を使うか、標準の「Compose」アクションで正規表現を手動で記述します。標準では「match」関数は使えませんが、式ビルダーで「match(triggerBody()?[‘body’], ‘お問い合わせ番号:\s*(\d+)’)」のように記述できます。ただし、match関数は配列を返すため、結果を取得するには「items[0]」などで最初のマッチを指定します。
  4. 結果の取得: 「Compose」アクションの出力を「式」タブで「outputs(‘Compose’)?[‘groups’]?[‘1’]」のように参照するか、あるいは「Apply to each」で配列をループ処理します。単一の値のみ必要な場合は、式のグループインデックスを直接指定します。
  5. 後続処理: 抽出した値をCSVファイルに追加したり、SharePointリストに保存したりします。たとえば「行の挿入」アクションでリストに値を書き込みます。
方法 使用するアクション メリット デメリット
正規表現(標準式) Compose + 式 match 追加コネクタ不要、シンプル 複雑なパターンやグループ参照がやや面倒
正規表現(サードパーティ) Encodian 正規表現、Plumsail など 豊富なオプション、テスト機能 ライセンス費用が発生する場合あり
テキスト解析(分割) Compose + split, subsequence 簡単な区切り文字なら直感的 変則的な書式に対応しにくい
JSON解析 JSONの解析アクション 構造化データなら確実 メール本文がJSON形式である必要がある

よくある失敗パターンと対策

値の抽出に失敗するケースはいくつかあります。代表的なものを挙げて対策を示します。

  • HTMLメールの余分なタグ: メール本文がHTML形式の場合、<p>や<br>などのタグが間に入り、見た目上の文字列と実際の文字列が異なります。対策として、HTMLをプレーンテキストに変換するアクション(例:HTML to text)を前処理として挟みます。標準コネクタでは「HTMLからテキストへの変換」アクションが用意されています。
  • 改行コードの違い: メールサーバーによって改行がCRLFだったりLFだったりします。正規表現で「\s」や「。」を使うと改行も含まれるため、「.」ではなく「[^\n]」などの否定文字クラスを使うと安全です。
  • 抽出したい値が複数存在する場合: 最初の1つだけを取得したいのに、match関数が配列を返すため意図しない値が入ることがあります。その場合は「first」関数やインデックス指定で最初の要素を明示的に取得します。
  • 全角半角の混在: 数字が全角で書かれていると、半角の正規表現「\d」ではマッチしません。全角も含めるには「[0-90-9]」または「0-9」の範囲を指定します。

管理者への確認ポイント・制約

会社のPower Automate環境では、標準コネクタ以外の利用に制限がある場合があります。また、メールボックスへのアクセス権限やAPI制限も影響します。以下の点を管理者に確認してください。

  • サードパーティコネクタの利用ポリシー: EncodianやPlumsailなどの有償コネクタを使うには、組織の承認が必要な場合があります。まずは無料範囲の標準コネクタで実現できないか検討しましょう。
  • DCR(データ損失防止)ポリシー: Power AutomateのDCRポリシーで、メールコネクタと他のコネクタとの接続が制限されていることがあります。フロー作成時にポリシー違反が表示される場合は、管理者にポリシーの緩和を依頼してください。
  • ライセンス: 一部のプレミアムコネクタ(たとえば「Visual Studio Team Services」など)はPower Automate per user プランが必要です。使用するアクションが標準範囲内か確認しましょう。

よくある質問

Q1: 半角と全角の数字が混在している場合、どうやって抽出すればよいですか?

正規表現パターンで半角全角両方の数字を含める必要があります。「[0-90-9]+」のように範囲を指定するか、全角数字を半角に変換する「全角変換」アクション(標準コネクタにはありませんが、サードパーティ製や自作関数で対応可能)を前処理として使う方法もあります。実運用では、受け取るメールの形式を確認し、統一したルールで送信元に依頼することも検討してください。

Q2: メール本文から数字だけを全て抜き出したい場合はどうすればいいですか?

その場合、正規表現で「\d+」を使用し、match関数で全てのマッチを取得します。Power Automateの式では「match(bodyText, ‘\d+’)」と記述すると、数字の連続を全て含む配列が返ります。その後、Apply to eachでループ処理して各値を個別に取り出します。ただし、電話番号や日付など意図しない数字も含まれるため、必要に応じて後処理でフィルターしてください。

Q3: 抽出した値をCSVに保存したいのですが、文字化けを防ぐには?

Power AutomateでCSVファイルを作成する際は、文字コードがUTF-8になるため、多くの場合問題ありません。ただし、Excelで開くとShift-JISと仮定されて文字化けする場合があります。その場合は、CSVの先頭にBOM(0xEF,0xBB,0xBF)を付けるか、ファイル作成後に「ファイルの内容」をエンコード変換するアクションを追加します。サードパーティコネクタの「エンコード変換」を使うか、Azure Functionsを呼び出す方法もあります。

まとめ

Power Automateでメール本文から値を抜き出すには、メールの形式を確認し、正規表現やテキスト分割など適切な手法を選ぶことが重要です。標準式のmatch関数だけでも基本的な抽出は可能ですが、複雑なパターンやHTMLメールの場合は前処理やサードパーティコネクタの利用を検討してください。また、管理者に確認すべきライセンスやポリシーも事前に把握しておきましょう。実データでテストを繰り返し、想定外のフォーマットに対応できる堅牢なフローを目指してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT