前回の記事でGmail APIを使ってメールを送信するVBAマクロを紹介しましたが、今回は簡単にコードの説明を書いていこうと思います。
前回の記事のコードでは大まかに下記の処理を行っています。
- Google アカウントでサインインします。
- 承認後Authorization codeを取得します。
- Authorization codeを元に発行したAccess tokenを取得します。
- Access tokenをヘッダーに埋め込んでAPIを呼び出します。
■ Authorization codeの取得
APIを呼び出すためにAccess tokenが必要で、Access tokenを取得するために、まずはAuthorization codeを取得する必要があります。
取得方法は基本的には「Using OAuth 2.0 for Installed Applications – Google Accounts Authentication and Authorization – Google Developers」に書いてある通りで、まずは
https://accounts.google.com/o/oauth2/auth? client_id=(クライアント ID)& response_type=code& redirect_uri=urn:ietf:wg:oauth:2.0:oob& scope=(URLエンコードしたscope)
にアクセスします。
ここで指定するscopeは行いたい処理によって変わってくるので、詳しくは「Introduction – Gmail API – Google Developers」を参照してください。
「https://mail.google.com/」は全権限を持っていますが、スレッドやメッセージの削除を行わないのであれば、他のscopeを指定した方が良いでしょう。
Google アカウントでサインイン後、画面の指示に従って承認を行うと、“このコードをコピーし、アプリケーションに切り替えて貼り付けてください”のメッセージの下にあるテキストボックス(id:code)にコードが表示されます。
このコードがAuthorization codeになります。
上記作業を行うのが、前回の記事のコードの「GetAuthorizationCode」プロシージャになります。
■ Access tokenの取得
Authorization codeが取得出来たら、今度はAccess tokenを取得します。
この作業も「Using OAuth 2.0 for Installed Applications – Google Accounts Authentication and Authorization – Google Developers」に書いてある通りで、エンドポイント「https://accounts.google.com/o/oauth2/token」に対して、下記パラメータをPOSTします。
code=(取得したAuthorization code) client_id=(クライアント ID)& client_secret=(クライアント シークレット)& redirect_uri=urn:ietf:wg:oauth:2.0:oob& grant_type=authorization_code
特に問題が発生しなければ、下記のようなデータがJSON形式で返ってきます。
{ "access_token" : "(Access token)", "token_type" : "Bearer", "expires_in" : 3600, "refresh_token" : "(Refresh token)" }
このaccess_tokenが文字通り目的のAccess tokenで、上記作業を行うのが、前回の記事のコードの「GetAccessToken」プロシージャになります。
■ Gmail APIの利用
Access tokenの取得までできたら、あとはGmail APIを利用するだけです。
APIの利用方法も「Using OAuth 2.0 for Installed Applications – Google Accounts Authentication and Authorization – Google Developers」に書いてある通り、下記のようにAPIのリクエスト先に、Authorizationヘッダーに「Bearer (Access token)」を指定してGET/POSTするだけです。
GET https://www.googleapis.com/gmail/v1/users/me/messages HTTP/1.1 Authorization: Bearer (Access token)
リクエストに必要なパラメータはAPIによって異なり、たとえばメール送信を行う「Users.messages: send – Gmail API – Google Developers」の場合は、rawパラメータにRFC 2822形式のデータをBase64エンコードした文字列を指定する必要があります。
この作業を行うのが、前回の記事のコードの「SendGmail」プロシージャになります。
というわけで、上記の通り前回の記事のコードで何をやっているのか解説してきたわけですが、VBAで行う場合には、Google APIs Client Libraryが用意されておらず、URLエンコードもBase64エンコードもすべて自分で実装する必要があるので、とても面倒です。
やってやれないことはありませんが、業務での利用はお薦めしません・・・。
■ 関連Webページ
・Gmail APIを使ってメール送信するVBAマクロ
//www.ka-net.org/blog/?p=4524
・Gmail APIを使ってメール送信するVBAマクロ(3)
//www.ka-net.org/blog/?p=4545
この記事へのコメントはありません。