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. Google関連

    「GAS Station #2」に参加してきました。

    昨日(2015/10/9)行われたGAS(Google Apps Sc…

  2. Office関連

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

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

  3. アイコン一覧

    Office 2013 アイコン一覧(D)

    ・Office 2013 アイコン一覧 NUM…

  4. Office関連

    VBAを学ぶときの参考資料

    知人から「Excelのマクロを勉強したいんだけど、どうやって勉強したら…

  5. Office関連

    Office 2019のインストール方法

    下記ニュースサイトにある通り、永続ライセンス版のOffice 2019…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP