Office関連

Gmail APIを使ってメール送信するVBAマクロ(2)

前回の記事Gmail APIを使ってメールを送信するVBAマクロを紹介しましたが、今回は簡単にコードの説明を書いていこうと思います。

前回の記事のコードでは大まかに下記の処理を行っています。

  1. Google アカウントでサインインします。
  2. 承認後Authorization codeを取得します。
  3. Authorization codeを元に発行したAccess tokenを取得します。
  4. 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を指定した方が良いでしょう。

GmailAPI_02_01

Google アカウントでサインイン後、画面の指示に従って承認を行うと、“このコードをコピーし、アプリケーションに切り替えて貼り付けてください”のメッセージの下にあるテキストボックス(id:code)にコードが表示されます。
このコードがAuthorization codeになります。

GmailAPI_02_02

GmailAPI_02_03

上記作業を行うのが、前回の記事のコードの「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

関連記事

  1. Office関連

    Google Docs APIを使ってGoogle ドキュメントを操作するVBAマクロ

    前回の記事で新しく追加されたGoogle Docs APIを紹介しまし…

  2. Office アドイン

    [Office用アプリ]アプリ開発コンテスト・受賞者発表

    以前書いた記事でお知らせしていた「Apps for Office アプ…

  3. Office関連

    [Office]WordやPowerPointで画像の画質が悪くなった時の対処方法

    WordやPowerPointで画像を貼りつけたときやファイルを保存し…

  4. Office関連

    代替テキストを削除するPowerPointマクロ

    PowerPointの図やSmartArt、グループやグラフといった視…

コメント

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

  1. この記事へのトラックバックはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP