cybozu developer network

カテゴリー内の他の記事

Outlook連携 - kintoneからOutlookメールの送受信をしよう!!

2020年8月改訂のセキュアコーディング ガイドラインに抵触する内容が含まれています。認証情報が漏洩した場合の影響を考慮して慎重に検討してください。
該当箇所:外部ライブラリ(MSAL.js)内のアクセストークン保存部分

このカスタマイズで利用している kintone JS SDK は現在推奨されていません。今後は kintone JavaScript Client (@kintone/rest-api-client) を利用するように書き換えてください。

Index

はじめに

MicrosoftのOutlookといえばビジネス利用でお世話になっている方も多いはず。
そのOutlookメールがkintone上で送受信できるサンプルです。

メリットとしては、メールをkintoneに取り込むことで、他のkintoneアプリとの連携がしやすくなります。
また、kintoneのプロセス管理機能を使用してステータスの管理を行うことができます。

Outlook側への認証にOAuth2.0を利用しています。少し敷居が高く感じられるかもしれませんが、
詳しい手順の解説とサンプルコードを公開しておりますのでぜひ参考にしてください。

サンプルコードは GitHub上に公開しています。

概要

今回の注目部分はなんといっても認証部分です!Microsoftが提供している MSAL.js (外部サイト) を利用することで、Outlook(Microsoftアカウント)とのOAuth2.0を利用した認証をkintone上で行うことができます。

連携の流れは以下となっています。

  • kintoneからOAuth認証を用いてAzure AD V2 Endpoint へサインイン
  • kintoneからAzureへアクセストークンを取得
  • アクセストークンを使って Graph API を叩く
  • レスポンスを kintone のアプリに登録

Graph APIはMicrosoft Cloudサービスリソースへのアクセスを可能にするAPIです。

image1.png

kintone アプリの作成

kintoneアプリでは以下のフィールドを配置してください。

フィールド名 フィールドタイプ フィールドコード
subject 文字列(1行) subject
contents リッチエディター contents
from 文字列(1行) from
TO 文字列(1行) TO
CC 文字列(1行) CC
BCC 文字列(1行) BCC
messageId 文字列(1行) messageId
mailAccount 文字列(1行) mailAccount
attachFile 添付ファイル attachFile

こちらがアプリの配置したフィールドのフォーム画面です。
image2.png

Azure Active Directory アプリケーションの登録

事前準備

Outlook と kintone を連携させるため、Azure Active Directory へアプリケーションを登録する必要があります。
事前に以下を行ってください。

  1. Microsoft アカウントの取得
  2. 1. で取得したアカウントで Azure Portal へログイン

アプリケーションの登録

左メニューの「Azure Active Directory」を選択します。

01.png

「アプリの登録」を選択します。

02.png

「アプリケーションの登録」ボタンをクリックします。

03.png

次のように入力します。入力が終わったら「登録」ボタンをクリックします。

04.png

項目
名前 任意のアプリ名(今回は kintone×Outlookとします)
サポートされているアカウントの種類 必要に応じて、以下のいずれかを選択します。
  • 任意の施設ディレクトリ内のアカウント(任意の Azure AD ディレクトリ・マルチテナント)
  • 任意の施設ディレクトリ内のアカウント(任意の Azure AD ディレクトリ・マルチテナント)と個人の Microsoft アカウント
リダイレクトURI
  • 「Web」
  • 先ほど作成した kintone アプリの URL

作成したアプリケーションで、「認証」メニューを選択します。
「暗黙の付与」の「アクセストークン」と「IDトークン」にチェックを入れ、「保存」ボタンをクリックします。

05.png

アプリケーションIDは、作成したアプリケーションの「概要」メニューで確認できます。
kintone に適用する カスタマイズファイルに利用するので、メモしておいてください。

06.png

 以上で登録は完了です。

※ 認証時のリクエストにアクセス権のスコープを含めているため、アプリ登録画面での「Microsoft Graph のアクセス許可」の設定は不要です。 

プログラムの説明

今回使用するプログラム

  • SAMPLE-kintone-connect-azure
    サンプルプログラム一式です。
  • 利用するプログラムファイル
    • common-js-functions.min.js
      • 共通処理を記述するプログラムです
      • common ディレクトリ内にあります。
    • kintone-connect-outlook_mail_common.js
      • kintoneアプリ/Microsoftアプリの設定を記述するプログラムです
      • 環境に合わせて修正する部分があります(後述)
      • outlook-mail ディレクトリ内にあります。
    • oauth.js
      • OAuth2.0を利用してAzureへの認証処理を行うプログラムです。
      • common ディレクトリ内にあります。
    • kintone-connect-outlook_mail.js
      • アクセストークンを用いてOutlookからメールデータを取得するプログラムです
      • outlook-mail ディレクトリ内にあります。

また、今回は上記プログラム以外にライブラリとして以下を利用します。

  • MSAL.js
    AzureからOAuth認証でアクセストークンを取得するプログラムです。
    • https://secure.aadcdn.microsoftonline-p.com/lib/1.0.0/js/msal.js
  • jQuery v3.4.1
    • https://js.cybozu.com/jquery/3.4.1/jquery.min.js
  • Sweet Alert2 v8.17.6
    • https://js.cybozu.com/sweetalert2/v8.17.6/sweetalert2.min.js
    • https://js.cybozu.com/sweetalert2/v8.17.6/sweetalert2.min.css

プログラムの修正

kintone-connect-outlook_mail_common.js を修正します。

  • Microsoftアプリの設定でメモしておいたアプリケーションID(7行目)を変更してください。
  • kintone アプリのフィールドコードが kintone アプリの作成 に記載したフィールドコードと異なる場合には、28行目〜53行目を修正してください。

プログラムの配置

これらのプログラムを「アプリの設定>JavaScript/CSSでカスタマイズ」下に配置します

カスタマイズの適用

プログラムの解説

kintoneイベントの処理 (kintone-connect-outlook_mail.js )

kintoneの各イベント処理は以下となっています。

レコード一覧画面表示イベント

レコード詳細画面表示イベント

レコード作成/編集画面表示イベント

Outlookモジュール ( kintone-connect-outlook_mail.js )

kintoneとOutlookのコネクション部分を一部抜粋して説明します。

MSAL.jsのインスタンス化

userAgentApplicationとしてインスタンス化し、以降の処理に利用します。

Azureからトークンを取得する

サインイン処理では、まずAzureからIDトークンを取得します。

そして取得したIDトークンを用いてアクセストークンを取得します。

取得したアクセストークンを用いてメールデータを取得する

GraphAPIをkintone上で叩いてOutlookのメールデータを取得しています。
外部APIをkintone上で叩く方法はコチラのAPIドキュメントをご覧ください。

動作確認

kintoneアプリのレコード一覧画面に『Sign In Outlook』というボタンが表示されるので、ボタンをクリックします。
image8.png

OAuth認証画面が表示されるので、 Microsoftアプリの設定で準備したMicrosoftアカウントでログインします。
image9.png

メールアドレスを入力したあとにエラーが表示される場合、Microsoftアプリの設定が間違っている場合があります。もう一度設定内容をご確認ください。

ログインに成功した場合、先ほどまで『Sign In Outlook』だったボタンが『Receive Mail』『Sign out』に変わります。

『Receive Mail』ボタンをクリックすることで、Graph APIにリクエストを投げてレスポンス(メールデータ)をkintoneのレコードに登録します。
image10.png

無事、Outlookのメールがkintoneに登録されました。 
image11.png

※すでに取得済み(kintoneに登録済み)のメールは登録されません。

 

次に、送信の確認をします。

kintoneのレコード追加を選択し、必要な部分を記入します。
image12.png

※本文はkintoneのリッチエディターフィールドを利用しているので、文字色や文字サイズの変更などもできます。 

レコードを保存すると、レコード詳細画面の上部に『Send Mail』というボタンが表示されるので、ボタンをクリックすればメールを送信することができます。
image13.png

 きちんとメールが送信できたことが確認できます。
image14.png

おわりに

いかがでしょうか。

Microsoftアプリの設定を事前にしておけば、kintone上だけでOutlookのメール確認ができてしまいます!

今回はOutlookメールのみのご紹介でしたが、Graph APIの項目によってスケジュールやその他の機能と連携することも可能です。

変更履歴

  • 2019/11/18
    •  以下の変更に伴い、ソースコードを修正しました。
      • 利用ライブラリの変更
        kintone Utility Library for JavaScript ->  kintone JS SDK
        kintone UI Component を追加
      • jQuery v3.2.1 から v3.4.1 に変更
      • SweetAlert2 v6.10.1 から v8.17.6 に変更
      • Microsoft Graph v1 から v2 に変更

このTipsは、2019年11月版 kintoneで確認したものになります。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

Avatar
礒野 修也

こちら 現在上記手順でMap表示されないのですが何か変更などございますでしょうか?

Avatar
cybozu Development team

磯野 修也 様

お世話になっております。cybozu developer network 事務局です。

本記事では地図の表示に関する記載はないのですが、どのような状況でしょうか。
「記事フィードバックのためのガイド」に沿って、エラー情報や再現条件を記載いただけないでしょうか。

どうぞよろしくお願いいたします。

Avatar
てん

ご担当者様

いつもお世話になっております。

Outlookのメーラーのみを使用している場合(他社レンタルサーバーで発行されたドメインのメールアドレス送受信を、Windows PCにインストールしているOutlookアプリケーションで行っている場合)でも、上記連携は実装可能でしょうか?

ご教授宜しくお願い致します。

Avatar
cybozu Development team

てん 様

お世話になっております。cybozu developer network 事務局です。

本記事は Microsoft のクラウドサービス利用が前提となっておりますので、
ローカルの Outlook アプリケーションには対応しておりません。

また、こちらのコメント欄は記事内容のフィードバック目的となっているため、
記事から派生した技術的なご質問は cybozu developer コミュニティをご活用ください。

よろしくお願いいたします。

Avatar
てん

cybozu developer network 事務局 ご担当者様

ご回答ありがとうございます。よく分かりました。助かりました。

コメント欄の使い方、理解できておらず申し訳ありません。次回注意します。ありがとうございました。

Avatar
hanazawa

cybozu Development team  ご担当者様
お世話になっております。
Outlookでログインはできたのですが、メール受信しようとすると、「Outlookにアクセスできませんでした」と表示されます。
Graph APIの連携(アクセストークンの認証)ができていないのだと思われますが、どのあたりを確認すればよいでしょうか。
私が確認できることとして下記2点かと考えています。
1. この記事冒頭に「 kintone JS SDK は現在推奨されていません。今後は kintone JavaScript Client (@kintone/rest-api-client)を使ってください 」とありますが、単純に https://unpkg.com/@kintone/rest-api-client@latest/umd/KintoneRestAPIClient.js をURL指定で追加すればよろしいでしょうか?他に必要な操作がございましたらお教えいただけますと幸いです。
2.MicrosoftAzureで下記のような記載がありますが、URIを移行する必要がありますでしょうか。
 「移行する必要があります」の部分をクリックすると、SPAに移行するURIを選択してください、と案内されますが、
 こちらを実施したほうが良いでしょうか。


よろしくお願いいたします。

hanazawaにより編集されました
Avatar
cybozu Development team

hanazawa 様

お世話になっております。cybozu developer network 運営でございます。

恐れ入りますが、こちらのコメント欄は記事内容のフィードバック目的となっておりますため、
派生した技術的なご質問はcybozu developer コミュニティをご活用ください。

よろしくお願い致します。

サインインしてコメントを残してください。