Docly Child

Outlookからのメール取得

1657 views

この記事ではOutlookGetを使って任意のOutlookメールを取得する方法について紹介します。

 「OutlookGet」Outlookメールを取得する

Outlookメールを取得する場合、「OutlookGet」アクションを使用します。

アクションの使用には、Outlookとのコネクション作成が必要です。
こちらを参考に、コネクションを作成してください。

※アクションの設定項目について、詳細はドキュメントも合わせてご参照ください。

各メールの内容は、画像の通りオブジェクト形式で出力されます。
また、各メールはリスト形式にまとまっており、
OutlookGetアクションのアウトプットは、このリストにあたります。
「ワークフローの設定例」では、オブジェクトからデータを取得する方法を紹介します。

※オブジェクトの詳しい説明はこちら
 リストの詳しい説明はこちら

OutlookGetの注意点

デフォルトの設定では、取得メールは以下を含みます。
・自分が送信したメール
・転送の送受信メール、CC,BCCメール

自分のアカウント宛の受信メールに絞ってメールを取得したい場合、
「設定時のQ&A」の「2.取得するメールを絞り込みたい」をご参照ください。

 設定時のQ&A

「最大取得件数(limit)」の項目に0を設定します。

「クエリ」欄の設定で、取得するメール情報を絞り込むことができます。

①クエリの利用イメージ

OutlookGetで取得できるメール情報は、以下のようなイメージで捉えることができます。
クエリは、このイメージにおける行・列それぞれについて絞り込みや並べ替え等を行うための条件式にあたります。

このイメージにおいて、行の絞り込みは取得するメールの選択、列の絞り込みは取得項目の選択に該当します。
以下では、絞り込みの代表的なパラメーターを3つ紹介します。
絞り込みの方向パラメータ名検索項目・ユースケース

(取得メール)
$search件名、本文、宛先、送信元の部分一致検索

(取得メール)
$filter件名の完全一致検索、受信期間での検索(例:9月中のメール)

(メールの項目)
$selectbody(本文), subject(件名)などに絞って結果を取得する

なお、クエリの基本的な書き方は「$パラメーター=値」で、
二つ以上の条件を使う場合は「&」で繋げます。

② $search _ 行(取得するメール)の絞り込み

(例)件名に〇〇という単語を含むメールのみ取得する。

行の絞り込みには、主に$searchを使用します。
$searchでは、指定した項目名に特定の検索ワードを含むメールのみに絞り込みが可能です。

記述方法は以下の通りです。ポイントは以下2点です。
・囲い文字はダブルクオーテーションにすること。
・複数の検索条件を設定する場合、大文字で「AND」または「OR」をダブルクオーテーション内で設定すること。

$search = "項目名 : 検索ワード AND 項目名 : 検索ワード"

例えば、以下のように記述します。
検索に使う項目名は「⑥指定可能なプロパティ(項目名)」で後述します。

・件名に「株式会社○○」を含む
$search = "subject : 株式会社〇〇"

・自分宛のメール
$search="to:自分のアドレス"
・件名に「報告」を含み、 かつ 差出人に「村山」を含む
$search = "subject : 報告 AND from : 村山"

・本文に「https://www.google.com」 もしくは 「https://www.yahoo.co.jp」を含む
$search = "body : https://www.google.com OR body : https://www.yahoo.co.jp"

※$searchで数字や日本語を使った検索を行うと、
想定通りに結果が取得できないことがあります。(例:「100件」「2年」)

これはoutlook側の検索の仕組みによるものですので、
以下をご検討ください。

・検索ワードの長さを調節する
$filterでの検索をお試しいただく
ConvertJSONToArrayアクションとConvertTableアクションを組み合わせて、別途フィルターをかける形になります。

③ $filter _ 行(取得するメール)の絞り込み

(例) 9月中のメールを取得する。

主に$selectで指定ができない以下のユースケースで使用します。

・件名や差出人の完全一致検索
・未読メールの検索
・指定期間中の受信メール検索

記述方法は基本的に以下の通りです。ポイントは以下3点です。
・演算子はOutlook規定のものを使うこと。
(詳細はこちらをご覧ください。)
・値が文字列の時、シングルクオーテーションで囲むこと。
・複数条件を指定する場合、それぞれを小文字のor/andでつなぐこと。

1. eq(等しい), ne(等しくない), ge(以上), le(以下)など
$filter = 参照するメールの項目 演算子 '比較する値'
2. startsWith(〜で始まる), endsWith(〜で終わる), contains(〜を含む)
$filter = 演算子(参照するメールの項目, 比較する値)

検索に使う項目名はGmailGetのアウトプットの項目名に等しいです。
参照したい項目が何かの項目の中に入っている(画像参照)時は、
大項目/中項目/小項目のように”/”で辿って指定をします。

例えば、以下のように記述します。

・差出人が任意の名前に完全一致する
$filter = from/emailAddress/name eq '名前'
・件名に任意の文字を含む $filter = contains(subject,'文字列') ・未読メールを取得する $filter = isRead eq false ・2021年9月の未読メールを全て取得する $filter=receivedDateTime ge 2021-09-01 and receivedDateTime le 2021-09-30 and isRead eq false ・2022年10月28日の9:25:00以降に取得したメールを全て取得する $filter=receivedDateTime ge 2022-10-28T09:25:00Z

 

・あるスレッドのメールを全て取得する

$filter=conversationId eq 'スレッドのID'

 

 

④ $select _ 列(メールの項目)の絞り込み

(例)取得できる情報のうち、件名と本文のみを取得する。

列の絞り込みには、$selectを使います。
これにより、メールから指定した項目名のみを取得できます。

記述方法は以下の通りです。ポイントは以下2点です。
・項目が複数ある場合は、カンマで区切ります。
・クオーテーションの囲いは不要です。

$select = 項目名, 項目名, 項目名

例えば、以下のように記述します。
検索に使う項目名は「⑥指定可能なプロパティ(項目名)」で後述します。

$select = id, subject, body, isRead
 

⑤ $orderby _ 行(取得するメール)の並べ替え

取得するメールを$orderbyで昇順、もしくは降順で並べ替えることが可能です。

昇順
$orderby = 項目名 asc
降順
$orderby = 項目名 desc

例えば、以下のように記述します。
検索に使う項目名は「⑥指定可能なプロパティ(項目名)」で後述します。

・未読のメールのみを取得し、受信日時順で昇順に並べ替える
$filter= isRead eq false & $orderby = receivedDateTime asc

 

⑥検索可能なプロパティ(項目名)

$select, $searchで使えるプロパティを紹介します。
(引用元:https://docs.microsoft.com/ja-jp/graph/search-query-parameter?view=graph-rest-1.0#using-search-on-message-collections

検索可能な電子メール プロパティ説明
attachment電子メール メッセージに添付されているファイルの名前。 
bccSMTP アドレス、表示名、エイリアスとして指定されている、電子メール メッセージの bcc フィールド。
body電子メール メッセージの本文。
ccSMTP アドレス、表示名、エイリアスとして指定されている、電子メール メッセージの cc フィールド。
fromSMTP アドレス、表示名、エイリアスとして指定されている、電子メール メッセージの送信者。
hasAttachment電子メール メッセージに添付ファイルがあり、そのファイルがインラインの添付ファイルでない場合は true、そうでない場合は false。
importance送信者がメッセージを送信するときに指定できる電子メール メッセージの重要度。 使用可能な値: lowmediumhigh
kindメッセージの種類。 使用可能な値: contactsdocsemailfaxesimjournalsmeetingsnotespostsrssfeedstasksvoicemail
participantsSMTP アドレス、表示名、エイリアスとして指定されている、電子メール メッセージの from、to、cc、bcc フィールド。
received電子メール メッセージが受信者によって受信された日付。
recipientsSMTP アドレス、表示名、エイリアスとして指定されている、電子メール メッセージの to、cc、bcc フィールド。
sent送信者によって電子メール メッセージが送信された日付。
sizeアイテムのサイズ (バイト数)。
subject電子メール メッセージの件名行に含まれるテキスト。
toSMTP アドレス、表示名、エイリアスとして指定されている、電子メール メッセージの to フィールド。

クエリで特定の項目に対して$orderby(並べ替え)と$filter(絞り込み)を同時に使用すると下記エラーになる場合があります。

Error: Request failed with status code 400 The restriction or sort order is too complex for this operation.

これはOutlook側の仕様によるもので、特定の項目に対しては通常通りの指定ができなくなっています。

ただ、一定のルールに則ってクエリを作成するとエラーを回避することができます。

AUTOROの設定で意識する内容は以下の通りです。

  1. $orderby(並べ替え)をする項目は$filter(絞り込み)でも指定する必要がある
  2. $orderby(並べ替え)で複数の並べ替えをする場合は$filter(絞り込み)でも同じ順番で指定する必要がある
  3. $orderby(並べ替え)をする項目は$filter(絞り込み)の指定で、並べ替える項目、それ以外の項目の順番で指定する必要がある
上記ルールをもとに、成功するクエリ例と失敗するクエリ例は下記の通りになります。
使用する項目名は以下二つ
receivedDateTime=受信日時
hasAttachments=添付ファイル
・失敗例1
目的:添付ファイルが付いているもので絞り込み&受信日時を昇順で並べ替える $orderby=receivedDateTime asc & $filter= hasAttachments eq true 失敗理由:filterにreceivedDateTimeが無いため

・失敗例2
目的:添付ファイルが付いているもので受信日時が2020年1月1日以降のものに絞り込み&受信日時を昇順で並べ替える
$orderby=hasAttachments asc,receivedDateTime asc & $filter= receivedDateTime ge 2020-01-01T00:00:00Z and hasAttachments eq true
失敗理由:filterの項目の順序がorderbyの項目の順序と異なっているため
・失敗例3 
目的:添付ファイルが付いているもので受信日時が2020年1月1日以降のものに絞り込み&受信日時を昇順で並べ替える $orderby=receivedDateTime asc & $filter= hasAttachments eq true and receivedDateTime ge 2020-01-01T00:00:00Z
失敗理由:filterの順序が「hasAttachments 」、「receivedDateTime」となっており、並べ替える項目がその他の項目より後ろになっているため
・成功例1
目的:添付ファイルが付いているもので受信日時が2020年1月1日以降のものに絞り込み&受信日時を昇順で並べ替える $orderby=receivedDateTime asc & $filter= receivedDateTime ge 2020-01-01T00:00:00Z and hasAttachments eq true

・成功例2
目的:添付ファイルが付いているもので受信日時が2020年1月1日以降のものに絞り込み&受信日時を昇順と添付ファイルの有無で並べ替える
$orderby=receivedDateTime asc,hasAttachments asc & $filter= receivedDateTime ge 2020-01-01T00:00:00Z and hasAttachments eq true

参考→Microsoft:同じクエリ内での filter と orderby の使用

サブフォルダのメールを取得したい場合は、アクションのメールフォルダ欄に全ての親フォルダとの階層構造(パス)をスラッシュ区切りでご入力ください。

メールフォルダ欄の記入フォーマット

親フォルダ/子フォルダA/孫フォルダ

上記画像のフォルダ(サブフォルダS)内のメールを取得する場合の例
TESTH/サブフォルダ/サブフォルダS

 ワークフローの設定例

例えば次の条件であれば、
以下のように設定します。

【条件】
クエリ:件名に「オートロ株式会社」を含む
取得項目:件名、本文
フォルダ:「資料請求」というフォルダ
取得件数:10件

以下の通り「OutlookGet」アクションを設定します。

  • プロバイダーIDを設定します。
    「プロバイダーIDを選ぶ」ボタンをクリックすると、作成済みのコネクションから簡単に選択できます。
  •  メールフォルダにフォルダ名を入力します。
  • クエリを以下の通り入力します。
    $search = "subject : 【オートロ株式会社】" & $select = subject, body

 

【株式会社△△】、【株式会社□□】のメールを弾いて、【オートロ株式会社】のメールのみ取得できています。

 

# Outlookメールを取得する
+outlook_get_1:
  action>: OutlookGet
  provider: outlook_xxxx
  folder: '資料請求'
  query: '$search = "subject : 【オートロ株式会社】" & $select = subject, body'
  limit: 10
  meta:
    display:
      provider:
        type: chip
        label: 'Outlook (xxxx@outlook.jp)'
        icon: outlook

このページは役に立ちましたか?

アウトルック メール オフィス office office36