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

    Office 2013をインストールしてみました。

    CNET Japanの記事「マイクロソフト、「Office 2013」…

  2. Office関連

    指定したフォルダ内の画像ファイルを一括挿入するPowerPointマクロ

    大量の画像ファイルを1枚/1スライドで挿入する必要があり、…

  3. Office関連

    [リボン・カスタマイズ]アクティブシートにより表示するグループを切り替える。

    Excelで、選択しているシートによって表示するグループを切り替えたい…

  4. Office関連

    プロダクトIDを取得するWordマクロ

    下記質問用に書いたコードです。「バージョン情報」で表示されるプロダ…

  5. Office関連

    [PowerPoint]図やスライドをSVGとして保存する機能が追加されました。

    ※ 下記情報はInsider版のOfficeを元にしています。バージョ…

  6. アイコン一覧

    Office 2013 アイコン一覧(W)

    ・Office 2013 アイコン一覧 NUM…

コメント

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP