Microsoft 365 の、メールなどのデータにアクセスする方法として、Microsoft は IMAP と POP3 の Basic認証を廃止とし、Graph API の使用を推進しています。
4D v19 R3 では、OAuth 2.0 接続と Graph API によるメール送信を管理するために 4D Netkit コンポーネントを導入しました。
v19 R8 では、メールの受信 と メールボックスフォルダーを一覧表示 するための 新しいコマンド を追加しています。
アカウント接続
まず初めに、OAuth2 接続用のオブジェクトと Office 365 オブジェクトを作成します。
var $oAuth2: cs.NetKit.OAuth2Provider
var $office365 : cs.NetKit.Office365
$oAuth2:=cs.NetKit.OAuth2Provider.new($param)
$office365:=cs.NetKit.Office365.new($oAuth2;\
New object("mailType"; "Microsoft"))
メールフォルダー
.getFolderList() 関数を使用することで、ルートフォルダー直下のメールフォルダーのコレクションを取得することができます:
$folderList:=$office365.mail.getFolderList()
// ルートフォルダー直下のメールフォルダーのコレクション
$folders:=$folderList.folders
このコレクションには、各フォルダーについて、フォルダー名、ID、メール数といった有用な情報が格納されています:
子フォルダーを持つフォルダーがある場合には、親フォルダーID を引数として .getFolderList() 関数を呼び出すと、子フォルダーの情報が取得できます:
$childrenList:=$office365.mail.getFolderList($folders[8].id)
電子メールをダウンロードする
メールボックスのメールを取得するには、.getMails() 関数を使用します。たとえば、Inboxフォルダーのメールをすべて取得したい場合:
$param:=New object
$param.folderId:=$folder[1].id // Inboxフォルダー
$mails:=$office365.mail.getMails($param)
選択したフォルダーが、デフォルトで用意されているようなフォルダーである場合、対応するフォルダーID値を使用する代わりに、既知のフォルダー名 (archive、drafts、inbox、junkemail、sentitems、など) を使用することができます。たとえば、以下の例のように書くことができます:
$param:=New object
$param.folderId:="inbox"
$mails:=$office365.mail.getMails($param)
特定のメールだけをダウンロードしたい場合は、.getMail() 関数を使い、メールの ID を渡します:
$mail:=$office.mail.getMail($mailId)
この機能については、上記の HDI とドキュメントで詳細を確認してください。