下記記事でMicrosoft GraphのPHP用SDKを紹介しましたが、今回は.NET用のライブラリを使って、Graph APIを呼び出してみたいと思います。
テスト環境
- Windows 10 Pro x64
- SharpDevelop 4.4
- Microsoft アカウント
アプリケーション IDの取得
APIを呼び出すにあたり、まずはアプリケーションID(クライアントID)を準備します。
- v2.0エンドポイントを使用するため、Application Registration Portalにアクセスし、Microsoft アカウントでサインインします。
- 「アプリの追加」ボタンをクリックします。
- Register your application画面が表示されたら、アプリケーション名や連絡先を入力して、「Create」ボタンをクリックします。
- アプリケーションの登録画面が表示されたら、「アプリケーション ID」(クライアントID)をコピーしておきます。
- 「プラットフォームの追加」ボタンをクリックして、「ネイティブ アプリケーション」を追加します。
- 「Microsoft Graph のアクセス許可」は「Mail.Send」、「User.Read」にします(必要に応じてここでスコープ設定)。
- 「保存」ボタンをクリックして、アプリケーションの設定を保存します。
.NET用ライブラリの準備
今回はVisual Studioを使わないので、コマンドライン版のNuGetを使って、必要なライブラリをインストールします。
nuget install Microsoft.Graph nuget install Microsoft.Identity.Client -PreRelease nuget install Newtonsoft.Json -Version 6.0.8
Microsoft Graph .NET Client LibraryによるAPIの呼び出し
準備が整ったので次はいよいよコードを書いていくわけですが、コードを書く前に下記参照を追加しておきます。
- Microsoft.Graph.dll
- Microsoft.Graph.Core.dll
- Microsoft.Identity.Client.dll
- Newtonsoft.Json.dll
- System.Net.Http
Program.cs
※ コード内のアプリケーション IDとメールの宛先は変更する必要があります。
using System; using System.Collections.Generic; using System.Net.Http.Headers; using System.Net.Http; using System.Linq; using System.Threading.Tasks; using Microsoft.Graph; using Microsoft.Identity.Client; namespace ConsoleAppForMSGraph { class Program { //※必要に応じて変更 static string appId = "(アプリケーション ID)"; static string[] Scopes = {"User.Read", "Mail.Send"}; static PublicClientApplication IdentityClientApp = new PublicClientApplication(appId); static string UserToken = null; static GraphServiceClient graphClient = null; public static void Main(string[] args) { graphClient = GetAuthenticatedClient(); if (graphClient != null) { var user = graphClient.Me.Request().GetAsync().Result; List<Recipient> recipientList = new List<Recipient>(); recipientList.Add(new Recipient{EmailAddress = new EmailAddress{Address = "mailto@hogehoge.hoge"}}); //宛先 var email = new Message { Body = new ItemBody { Content = "こんにちは! " + user.DisplayName + " さん", ContentType = BodyType.Text }, Subject = "TEST MAIL", ToRecipients = recipientList }; graphClient.Me.SendMail(email, true).Request().PostAsync(); } Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } public static GraphServiceClient GetAuthenticatedClient() { try { graphClient = new GraphServiceClient( "https://graph.microsoft.com/v1.0", new DelegateAuthenticationProvider( async (requestMessage) => { var token = await GetTokenForUserAsync(); requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token); } ) ); return graphClient; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Could not create a graph client: " + ex.Message); } return graphClient; } public static async Task<string> GetTokenForUserAsync() { AuthenticationResult authResult = await IdentityClientApp.AcquireTokenAsync(Scopes); //ユーザー操作要 UserToken = authResult.AccessToken; return UserToken; } } }
上記コードを実行すると、Microsoft アカウントのサインイン画面が表示されるので、サインインを行います。
コンセントUIが表示されるので、「はい」ボタンをクリックして、アクセスを許可します。
APIの呼び出しが無事に行われれば、指定した宛先にメールが届きます。
以上のように、専用のライブラリを使うことで、簡単なコードでMicrosoft GraphのAPIを呼び出すことができます。
泥臭くAPIを呼ぶこともできますが、ライブラリが用意されているのであれば、それを使った方が良いでしょう。
この記事へのコメントはありません。