Office365を使用するにあたって、Webでできない操作や一括処理を行う際などは一般的にPowerShellが使用されますが、Office365 APIが提供されたことにより、PHPなどのオープンソース言語からでもOffice365の操作ができるようになりました。
そこで、PHPなどのオープンソースを使用して簡単にWebアプリケーションが作成できるAzure App Serviceを使い、Azure App Service上のWebアプリケーションからOffice365を操作する検証をしてみました。
Azure App Service、Office365 APIについて
Azure App Serviceとは、アプリケーションを動作するためのPaaS環境で、アプリケーションの構築には、.NET、NodeJS、Java、PHP、Pythonなど様々な言語を使用することができます。
Office365は、OAuthとRESTによって連携することができます。Office365 APIは、Exchange Online、SharePoint Online、OneDrive for BusinessなどにあるOffice365データにアクセスできるようにするRESTサービスです。
今回の検証では、「Exchange Online上の受信メールの情報(最新10件)を取得し表示する」というアプリケーションを、Azure App Service上にPHPを使用して作成してみたいと思います。
クライアントID、キー、確認コードの取得
Office365とOAuthにより認証を行う為、アプリケーションを作成し、クライアントID、キー(クライアントシークレット)、確認コードを取得します。
【手順】
1.以下のURLよりAzureの管理ポータルにサインインします。
https://manage.windowsazure.com/
2.画面左部のメニューから「ACTIVE DIRECTORY」を選択します。
3.Office365のユーザー情報を登録しておくためのディレクトリが表示されますので、クリックします。
4.「アプリケーション」をクリックします。
5.画面下部の「追加」をクリックします。
6.「組織で開発中のアプリケーションを追加」をクリックします。
7.「名前」に任意の名前を入力し、「→」をクリックします。
8.「サインオンURL」にアプリケーションを動かすURLを入力します。
9.「アプリケーションID/URI」に、https://<テナントのドメイン>/<テナント内で一意の値> を入力し、「✔」をクリックします。
10.アプリケーションの追加完了画面が表示されます。画面上部の「構成」をクリックします。
11.画面を下部にスクロールし、「アプリケーションはマルチテナントです」にて「はい」をクリックします。
12.「クライアントID」をコピーして、メモ帳などに張り付けておきます。
13.下部にスクロールし、「キー」にて「1年」を選択します。
14.画面下部の「保存」をクリックします。
15.画面にキーが表示されますので、コピーしてメモ帳などに張り付けておきます。
16.画面下部にスクロールし、「アプリケーションの追加」をクリックします。
17.今回はExchange Online上の受信メールの情報を取得するアプリケーションを作成しますので、「Office365 Exchange Online」をクリックします。
18.「選択済み」に「Office365 Exchange Online」が表示されますので、画面下部の「✔」をクリックします。
19.アプリケーションが操作できる権限を設定します。「デリゲートされたアクセス許可」のプルダウンより「Read user mail」にチェックを入れ、画面下部の「保存」をクリックします。
20.上記でクライアントIDとキーが取得できました。次に確認コードを取得します。ブラウザに以下のURLを入力します。
https://login.windows.net/common/oauth2/authorize?response_type=code&client_id=<上記で取得したクライアントID>&resource=https%3a%2f%2foutlook.office365.com%2f&redirect_uri=<リダイレクトURI>
<例>
https://login.windows.net/common/oauth2/authorize?response_type=code&client_id=80a273c8-086f-44d3-978axxxxxxxxxxx&resource=https%3a%2f%2foutlook.office365.com%2f&redirect_uri=https%3a%2f%2flocalhost%2ftest001
21.サインイン画面が表示されますので、上記1で管理ポータルにサインインしたユーザーでサインインします。
22.認証に成功すると、ブラウザは、「リダイレクトURI?code=確認コード」のURLに遷移しますので、確認コードの部分をコピーしてメモ帳などに張り付けておきます。
Azure App Service Webアプリケーションの作成
Azure App Service にて、Exchange Onlineを操作するWebアプリケーションを作成します。
(以下の例では、Exchange Onlineより受信メール(最新10件)を取得し、ブラウザに表示するアプリケーションを作成します。)
【手順】
23.以下のURLよりAzureの管理ポータルにサインインします。
https://portal.azure.com/
- 画面左部のメニューから「参照」→「Marketplace」の順にクリックします。
- 検索用のテキストボックスに「php」と入力してエンターを押します。
26.「PHP Empty Web App」をクリックします。
27.「作成」をクリックします。
28.アプリ名に任意の値(Azure上で一意である必要があります)、リソースグループ名に任意の値を入力し、「作成」をクリックします。
29.画面左部のメニューから「App Service」をクリックして、作成したApp Serviceが表示されることを確認します。
- Visual Studio Onlineを使用してソースコードを実装するため、Visual Studio Onlineを使えるようにします。表示されたApp Serviceを右クリックして「ツール」をクリックします。
31.「Visual Studio Online」をクリックして、「オン」をクリックします。これでVisual Studio Onlineが使えるようになります。
32.「移動→」をクリックします。
- Visual Studio Onlineが起動します。「WWWROOT」配下にある「index.php」をクリックします。
34.「index.php」の編集画面が表示されます。
35.「index.php」に以下のコードを記載します。
<?php if(isset($_GET['code'])) { //アクセストークン取得 $authreq = curl_init(); curl_setopt($authreq, CURLOPT_URL, 'https://login.microsoftonline.com/common/oauth2/token'); curl_setopt($authreq, CURLOPT_POST, true); curl_setopt($authreq, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($authreq, CURLOPT_POSTFIELDS, https_build_query(array( 'grant_type' => 'authorization_code', 'code' => $_GET['code'], 'client_id' => 'クライアントIDを記載', 'client_secret' => 'キーを記載', 'redirect_uri' => 'リダイレクトURIを記載(「クライアントID、キー、確認コードの取得」の手順8にて指定したアプリケーションを動かすURL)', ))); curl_setopt($authreq, CURLOPT_RETURNTRANSFER, true); curl_setopt($authreq, CURLOPT_SSL_VERIFYPEER, false); $authres = json_decode(curl_exec($authreq)); curl_close($authreq); $access_token = $authres->access_token; //Office365 Exchange Online より受信メール取得(最新10件) $datareq = curl_init(); curl_setopt($datareq, CURLOPT_URL, 'https://outlook.office365.com/api/v1.0/me/messages?$top=10&$orderby=DateTimeSent%20desc&$select=Subject,DateTimeReceived,From'); curl_setopt($datareq, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' .$access_token)); curl_setopt($datareq, CURLOPT_RETURNTRANSFER, true); curl_setopt($datareq, CURLOPT_SSL_VERIFYPEER, false); $results = json_decode(curl_exec($datareq)); curl_close($datareq); // 結果表示 header('Content-type: text/html; charset=utf-8'); echo '受信メール一覧(最新10件)'; echo '<table border=1><tr bgcolor="pink">'; echo '<td>件名</td><td>受信日時</td><td>送信者</td></tr>'; foreach($results->value as $entry) { echo '<tr>'; echo '<td>'; echo $entry->Subject; echo '</td>'; echo '<td>'; echo $entry->DateTimeReceived; echo '</td>'; echo '<td>'; echo $entry->From->EmailAddress->Address; echo '</td>'; echo '</tr>'; } echo '</table>'; }else { echo 'codeError!!'; } ?>
記載したコードの保存は自動で行われます。画面上部にSAVEDと表示されていれば、最新のコードが保存されている状態です。
以上でWebアプリケーションの作成が完了です。
動作確認
【手順】
36.管理ポータルのトップ画面に戻り、画面左部のメニューから「App Service」をクリックし、作成したApp Serviceをクリックします。
37.「URL」に表示されているURLが作成したApp Service のURLになります。
ブラウザにて、
< App Service のURL>/?code=<確認コード>
にアクセスしてください。
Exchange Onlineの受信メールの最新10件が表示されます。