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 2013 アイコン一覧(T)

    ・Office 2013 アイコン一覧 NUM…

  2. Office関連

    日経ソフトウエア 2014年 10月号 「VBAでExcelを業務アプリ化」

    購読している雑誌、日経ソフトウエア 2014年 10月号に「イベントプ…

  3. Office関連

    フッターにページ番号と総ページ数を挿入するWordマクロ

    以前書いた、フッターに「ページ番号 / 総ページ数」を挿入するWord…

  4. Office関連

    メモ帳だけでOutlook用アドインを作ってみる。

    「SharpDevelopでExcel用COMアドインを作成する方法」…

  5. Office アドイン

    Visio JavaScript APIで遊んでみました。

    前回の記事でプレビュー版がリリースされた「Visio JavaScri…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP