Office アドイン

[Officeアドイン]メールアドインからOutlook REST APIを呼び出す方法

GitHubにメールアドインからOutlook REST APIを呼び出す方法に関する解説が載っていたので、さっそく試してみました。

マニフェストファイル

Permissionsを「ReadWriteMailbox」にしているのがポイントです。
適切なパーミッションを設定していないと、APIを呼び出したときに「ErrorAccessDenied」(The api you are trying to access does not support item scoped OAuth.)エラーが発生します。

<?xml version="1.0" encoding="UTF-8"?>
<OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="MailApp">
  <Id>6151ca01-a33f-4677-9a6f-2f1a974ef48a</Id>
  <Version>1.0</Version>
  <ProviderName>kinuasa</ProviderName>
  <DefaultLocale>ja-JP</DefaultLocale>
  <DisplayName DefaultValue="Sample 201704" />
  <Description DefaultValue="テスト用のメールアドインです(201704)"/>
  <Hosts>
    <Host Name="Mailbox" />
  </Hosts>
  <Requirements>
    <Sets>
      <Set Name="MailBox" MinVersion="1.1" />
    </Sets>
  </Requirements>
  <FormSettings>
    <Form xsi:type="ItemRead">
      <DesktopSettings>
        <SourceLocation DefaultValue="https://(WebServer)/mail.html" />
        <RequestedHeight>150</RequestedHeight>
      </DesktopSettings>
    </Form>
  </FormSettings>
  <Permissions>ReadWriteMailbox</Permissions>
  <Rule xsi:type="RuleCollection" Mode="Or">
    <Rule xsi:type="ItemIs" ItemType="Message" FormType="Read" />
  </Rule>
  <DisableEntityHighlighting>false</DisableEntityHighlighting>
</OfficeApp>

アドイン本体(mail.html)

細かい説明はGitHubに書いてある通りで、getCallbackTokenAsyncメソッドで取得したアクセストークンを、Authorizationヘッダーに付けてリクエストを投げているだけです。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>Sample</title>
    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.2.1.min.js"></script>
    <script>
      Office.initialize = function(reason){
        $(document).ready(function(){
          $("#btnGetMessage").click(function(){
            callOutlookApi();
          });
        });
      }
      
      //Outlook REST API呼び出し
      function callOutlookApi(){
        Office.context.mailbox.getCallbackTokenAsync({isRest: true}, function(result){
          if(result.status == Office.AsyncResultStatus.Succeeded){
            var access_token = result.value;
            var item_id = Office.context.mailbox.item.itemId;
            var item_restid = Office.context.mailbox.convertToRestId(item_id, Office.MailboxEnums.RestVersion.v2_0);
            var rest_host = Office.context.mailbox.restUrl;
            var message_url = rest_host + "/v2.0/me/messages/" + item_restid;
            
            //APIにメッセージIDを渡して件名や本文を取得
            $.ajax({
              type: "GET",
              url: message_url,
              dataType: "json",
              headers: {"Authorization": "Bearer " + access_token}
            }).done(function(response, textStatus, jqXHR){
              var mail_from = response.From.EmailAddress.Address;
              var mail_subject = response.Subject;
              var mail_body = response.Body.Content;
              var mail_sentdt = response.SentDateTime;
              
              var txt = "送信日時:" + mail_sentdt + "\n" +
                        "送信元:" + mail_from + "\n" +
                        "件名:" + mail_subject + "\n" +
                        "本文:" + mail_body;
              $("#results").val(txt);
            }).fail(function(jqXHR, textStatus, errorThrown){
              $("#results").val("Error:" + errorThrown);
            });
          }
        });
      }
    </script>
  </head>
  <body>
    <button id="btnGetMessage">メッセージ情報取得</button>
    <textarea id="results"></textarea>
  </body>
</html>

API呼び出しの失敗

GitHubに書いてあるコードを実行しても最初は上手くいきませんでした。

アクセストークンはちゃんと取得できているはずなのに、何度やってもエラー。
仕方ないのでFiddlerでレスポンスを確認したところ、「RequestBroker-ParseUri」(Resource not found for the segment ‘messages’.)エラーが返ってきていました。

そこでコードをよく見てみると、

APIのURLが間違っています。
(これだと「https://outlook.office365.com/api/api/v2.0/messages/」になってしまいます。)

何という凡ミス!
URLを修正したら問題無くAPIの呼び出せました。
やはり上手くいかなかったときは真っ先にレスポンスを確認しないといけないですね・・・。

Outlook Add-in APIだけでもメール情報の取得等できますが、足りない部分をREST APIで補えるのは便利だと思います。
なかなか面白いので、興味がある方は是非一度お試しください!

Women Techmakers Tokyo 2017に参加しました。前のページ

【感想】明日ちゃんのセーラー服1巻次のページ

関連記事

  1. Office関連

    インストールされているアプリケーション一覧を取得するVBAマクロ

    端末にインストールされているアプリケーション名を調べる必要があったので…

  2. Office関連

    Excel 2013で駅すぱあとWebサービス APIの「経路探索」を使ってみました。

    「「駅すぱあとWebサービス API無償提供」を利用してみました。」で…

  3. Office関連

    テスト用の文字列を挿入するWordマクロ

    文字列操作を行うマクロを書いているとき、テスト用に「あいうえおかきくけ…

  4. Office アドイン

    Office 2016で進化したOffice アドイン

    今日OfficeDevを眺めていて気が付いたのが「OfficeJS S…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP