Microsoft Graph でメールの添付を取得する方法は List attachments や Get attachments に記載があります。List messages などでメールを取得する際に /messages?$expand=attachments のようにリクエストしてまとめて取得する方法もあります。
ですがその前に、Exchange Online のメールの添付にはいくつかの種類があることを理解する必要があります。
ファイルの添付
Excel ファイルが添付されているなど、いわゆる通常の添付ファイルです。Microsoft Graph では fileAttachment リソースとして表現されます。
/messages でメールを取得したとき、ファイルの添付がある場合は hasAttachments が true になっています。
Outlook アイテムの添付
メールや予定などの Outlook アイテムが添付されている場合は、通常の添付ファイルとは扱いが異なり、Microsoft Graph では itemAttachment リソースとして表現されます。/messages でメールを取得したとき、Outlook アイテムの添付がある場合も hasAttachments は true になっています。
eml ファイルが添付されている場合は fileAttachment になりますが msg ファイルが添付されている場合は itemAttachment になります。
インライン添付
本文に埋め込まれた画像です。署名に画像が含まれている場合もインライン添付です。Microsoft Graph では fileAttachment リソースとして表現されます。
/messages でメールを取得したとき、インライン添付があっても hasAttachments は false になっています。本文に埋め込まれているためメールの body を取得すると img タグがあり、src 属性には “cid:f81e14a3-1bfe-491e-a2bb-e53481d97473” のような文字列が設定されています。fileAttachment リソースなので /attachments などで取得が可能であり、取得すると isInline が true になっています。また contentId には “f81e14a3-1bfe-491e-a2bb-e53481d97473” のような img タグの src 属性に設定されていた cid の値が設定されており、本文内の位置と対応させることができます。
クラウド添付
OneDrive などのリンク情報を添付としたものです。現在の Outlook には新たにこの種類のリンクを作る動作はありません。Microsoft Graph では referenceAttachment リソースとして表現されます。