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

Gmail APIを使ってメール送信するVBAマクロ前のページ

2014年6月の人気記事次のページ

関連記事

  1. Excel

    Wikipediaの検索予測キーワードの一覧を取得するVBAマクロ

    Wikipediaのサーチボックスにキーワードを入力すると、入力したキ…

  2. Office関連

    Re: 【Wordマクロ】Word起動時に、前回終了時に開いていたファイルを表示

    Word MVPの新田さんがブログで面白い記事を書かれていました。…

  3. Office関連

    Officeアプリケーションのバージョン情報ダイアログから情報を取得するVBScript

    自分の手間を減らすためのスクリプトシリーズ、今回はWordやExcel…

  4. Google関連

    [Google Apps Script]Webアプリケーションを作成する。

    Google Apps Scriptではスプレッドシートや文書上で動く…

  5. Office アドイン

    [Office用アプリ]Bing Maps for Accessの紹介

    Microsoft Download CenterでAccess向けO…

  6. Office関連

    セル内の改行をカウントするExcelマクロ

    「Excel セルの内容 改行を数える VBA」といったキーワード検索…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP