[ホーム] [会社概要] [製品] [サポート]
[BASP21 Pro] [FAQ] [アプリケーションガイド] [ユーザガイド] [リファレンス] [サンプル]
[FTP オブジェクト] [ソケット オブジェクト]

BASP21 Pro Gmail SMTP/POP3 OAuth2認証 (SendMail/RcvMail)

SendMail/RcvMailメソッドでGmail OAuth2認証でアクセスする方法を説明します。

OAuth2認証でSendMail/RcvMailメソッドを実行するには以下の手順が必要です。

OAuth 2.0 クライアントによりアプリケーションが識別され、 Google でアプリケーションを認証できるようになります。
これにより、BASP21 Proアプリケーションがエンドユーザーに代わって Google Cloud APIs にアクセスできます。

basp21p.iniパラメータは、以下のように設定が必要です。
basp21p.iniパラメータ名前説明
client_idクライアントIDGoogle OAuthクライアントID
client_secretクライアントシークレットGoogle Oauthクライアントシークレット
refresh_tokenリフレッシュトークンリフレッシュトークン。有効期限は無期限 注※
token_uriアクセストークン取得URLGoogle Token API
https://accounts.google.com/o/oauth2/token
serverGmail SMTPサーバーsmtp.gmail.com:465
TLS smtp.gmail.com:587
mailfromMailFrom送信元メールアドレス,Gmail(G Suite)アカウント:OAUTHBEARER|XOAUTH2
popserverGmail POP3サーバーpop.gmail.com:995

注※ Google ユーザーのアカウントを安全に保護するため、ユーザーのパスワードが変更されると、
特定のサービスにアクセスするために発行されたOAuth 2.0 トークンが自動的に取り消されます。
その場合、[認証コード]を取得(ブラウザ)から再度実行が必要です。


basp21p.iniファイルに設定が必要なパラメータを取得するために Google API を呼出します。
その際にコマンドプロンプトで curl コマンドを使います。
curl コマンドは、Windows 10に標準インストールされています。
コマンドプロンプトで curl -V で確認できます。

C:\>curl -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

C:\>
インストールされてない場合は、インストールが必要です。
参考: curlのインストール

注:BASP21 Pro の実行には、curl コマンドは使いません。
curlは、Gmail のOAUth2パラメータ取得に必要です。


Gmail OAuth2認証は、バージョン 1,0,2006,9以降でサポートされます。

■ Google API Console で[クライアントID]と[クライアントシークレット]の取得(ブラウザ)

[クライアントID]と[クライアントシークレット]は、ブラウザを使って取得します。
この処理は一度だけ実行します。
Google API Console(https://console.cloud.google.com/apis/)にアクセス。
Google アカウントでログインします。
ここではG Suite アカウントを使って説明します。
Gmail無料アカウントの場合はこちら

1. 新しいプロジェクトを作成します。
任意の名前でかまいません。



2. OAuth同意画面を[作成]。
G Suite なら [User Type]は、内部を選択できます。
Gmail無料アカウントは、外部しか選択できません。



3. アプリケーション名を入力。
任意の名前でかまいません。他の項目は、入力不要です。[保存]します。




4. OAuthクライアントIDを作成
[認証情報]-[認証情報を作成]-[OAuthクライアントID]をクリック。




[アプリケーションの種類]-[ウェブアプリケーション]を選択します。

[名前]は、任意な名前を入力します。
[承認済みのリダイレクトURI]は、http://localhost/notarealpage を入力します。




[クライアントID]と[クライアントシークレット]をコピーして保存します。





■ Google OAuth APIで[認証コード]を取得(ブラウザ)

[認証コード]は、ツールとブラウザを使って取得します。

ツール(gmail-oauth2.vbs ファイル)のダウンロードは、 こちら。

リフレッシュトークン再取得が必要になったときは、 このステップから再度実行します
再取得が必要なケースは、Googleアカウントのパスワードが変更されたとき、 リフレッシュトークンを紛失した場合です。

1. ツールで認証コードを取得
gmail-oauth2.vbs ファイルをエディタで開いて、●●部分を埋め込みます。


gmail-oauth2.vbs ファイルの内容。
''==============================================
'' ログファイルセット
LOGFILE="C:\●●slog.txt"
'' curl トレースファイルセット
CURLTRACE1="--trace-ascii C:\●●clog1.txt"
CURLTRACE2="--trace-ascii C:\●●clog2.txt"

'クライアントIDをセット
CID="●●"
'クライアントシークレットをセット
CSS="●●"
'==============================================

gmail-oauth2.vbs ファイルをダブルクリックして実行します。


2.認証コード取得
ブラウザが自動起動しますので認証コードを取得します。

ブラウザでURLを叩くと同意画面が表示されます。
使用するアカウントを選択。




[許可]をクリック。




アカウントIDを選択、認証後に、 以下のエラーがブラウザで表示されます。

HTTP エラー 404.0 - Not Found
探しているリソースは削除されたか、名前が変更されたか、または一時的に使用不可能になっています。



ブラウザのURL欄の code= 部分(xxxxxxx)を 認証コードとして 変数ACCにセットします。
http://localhost/notarealpage?code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&scope=https://mail.google.com/

以下のようにgmail-oauth2.vbs ファイル内にセットします。

gmail-oauth2.vbs ファイルの内容。

' フェーズ@で取得した認証コードをセット 初期値は""
(変更前)
ACC=""

(変更後)
ACC=".......認証コード..............."
'==============================================


■ Google Token APIで[リフレッシュトークン]を取得(curl)

ツールでcurl コマンドを実行して、GoogleトークンURLにアクセスしてリフレッシュトークンを取得します。
このステップ実行の前に、 curlコマンドが実行可能かどうかチェックします。
コマンドプロンプトで curl -V で確認できます。
C:\>curl -V
curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL
Release-Date: [unreleased]
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile SSPI Kerberos SPNEGO NTLM SSL

C:\>
gmail-oauth2.vbs ファイルをダブルクリックして実行します。

前のステップで取得した認証コードの寿命が数分と短いので このステップで失敗する場合は、新しい認証コードを再取得してトライしてください。

以下のようなjsonレスポンスがログファイル(LOGFILE変数にセットしたファイル)に表示されればOK。

2020/nn/nn 13:00:30:Aリフレッシュトークン取得フェーズ
curl --trace-ascii C:\WK\clog1.txt -d "code=......" -d "client_id=......." -d "client_secret=....."
 -d "redirect_uri=http://localhost/notarealpage" -d "grant_type=authorization_code"
 -d "access_type=offline" https://accounts.google.com/o/oauth2/token

curl grant_type=authorization_code..... done.

{
  "access_token": "...............",
  "expires_in": 3599,
  "refresh_token": "..............",
  "scope": "https://mail.google.com/",
  "token_type": "Bearer"
}
access_token=.................
refresh_token内容を 変数REFに設定
refresh_token=..................

done.
このjsonレスポンスで必要なものは、リフレッシュトークンのみです
リフレッシュトークンをgmail-oauth2.vbs ファイルにセットします。
gmail-oauth2.vbs ファイルの内容。

' フェーズAで取得したリフレッシュトークンをセット 初期値は""
(変更前)
REF=""

(変更後)
REF=".......リフレッシュトークン..............."
'==============================================
リフレッシュトークンには、有効期限はありません。
ただし、Googleユーザのパスワードが再設定された場合は、 リフレッシュトークンが無効となります。
その場合、[認証コード]を取得(ブラウザ)から再度実行が必要です。

■ Google Token APIでアクセストークン取得テスト(curl)


ツールで curl コマンドを実行して、アクセストークンを取得テストします。
gmail-oauth2.vbs ファイルをダブルクリックして実行します。

以下のようなjsonレスポンスがログファイルに表示されればOK。

2020/nn/nn 13:01:02:Bリフレッシュトークンによるアクセストークン取得テスト
curl --trace-ascii C:\WK\clog2.txt -d "client_id=....." -d "client_secret=....."
 -d "grant_type=refresh_token" -d "refresh_token=....." https://accounts.google.com/o/oauth2/token

curl grant_type=refresh_token..... done.

{
  "access_token": ".....",
  "expires_in": 3599,
  "scope": "https://mail.google.com/",
  "token_type": "Bearer"
}

リフレッシュトークンによるアクセストークン取得テスト完了
access_token=......

-------------- basp21p.ini -------------
[gmail]
# yyyy/mm/dd Gmail OAuth2
allow=all
client_id=.....
client_secret=......
token_uri=https://accounts.google.com/o/oauth2/token
refresh_token=.....
----------------------------------------
done.
最後に表示される basp21p.ini ファイルの設定項目をbasp21p.ini ファイルにコピペします。

■ SendMailサンプル(VBScript)

アクセストークン取得テストが完了したら準備完了です。
これでSendMailメソッドの実行準備ができました。
basp21p.ini ファイルとGamil送信メールスクリプトのサンプル。
logfileパラメータでログファイルを指定して実行結果を確認できます。

basp21p.iniファイルに取得済みのパラメータを設定します。
[global]
license=....
allow=all
[gmail1]
allow=all
logfile=c:\wk\gmail1-log.txt
server=smtp.gmail.com:465
########## パスワード部分に OAUTHBEARER あるいは XOAUTH2 を指定
mailfrom=送信元<○○1@△△.com>,○○1@△△.com:OAUTHBEARER
client_id=クライアントID1
client_secret=クライアントシークレット1
refresh_token=リフレッシュトークン1
token_uri=https://accounts.google.com/o/oauth2/token

[gmail2]
allow=all
logfile=c:\wk\gmail2-log.txt
server=TLS smtp.gmail.com:587
########## パスワード部分に OAUTHBEARER あるいは XOAUTH2 を指定
mailfrom=送信元<○○2@△△.com>,○○2@△△.com:XOAUTH2
client_id=クライアントID2
client_secret=クライアントシークレット2
refresh_token=リフレッシュトークン2
token_uri=https://accounts.google.com/o/oauth2/token
メール送信vbscriptサンプルは以下のようになります。
'' gmailsend.vbs
Set bobj = CreateObject("basp21pro")
bobj.Env="gmail1"
mailto="送信先アドレス1"
subject="件名1"
body="ハローgmail1"
files=""
rc = bobj.SendMail(mailto,subject,body,files)
Wscript.Echo "done rc1=" & rc
' Gmailアカウント切替
bobj.Env="gmail2"
mailto="送信先アドレス2"
subject="件名2"
body="ハローgmail2"
files=""
rc = bobj.SendMail(mailto,subject,body,files)
Wscript.Echo "done rc2=" & rc
SMTPプロトコルのコマンドシーケンスは、以下のようになります。
C: EHLO localhost
S: 250-smtp.gmail.com at your service, [xx.xx.xx.xx]
S: 250-SIZE 35882577
S: 250-8BITMIME
S: 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
S: 250-ENHANCEDSTATUSCODES
S: 250-PIPELINING
S: 250-CHUNKING
S: 250 SMTPUTF8
C: AUTH OAUTHBEARER bixhPXRi......................
または C: AUTH XOAUTH2 dXNlcj10Y......................
S: 235 2.7.0 Accepted
C: MAIL FROM: 
   [接続が続きます...]


■ RcvMailサンプル(VBScript)

basp21p.ini ファイルとGamil受信メールスクリプトのサンプル。
logfileパラメータでログファイルを指定して実行結果を確認できます。

basp21p.iniファイルに取得済みのパラメータを設定します。
[global]
license=....
allow=all
[gmail1]
allow=all
logfile=c:\wk\gmail1-log.txt
popserver=pop.gmail.com:995
client_id=クライアントID1
client_secret=クライアントシークレット1
refresh_token=リフレッシュトークン1
token_uri=https://accounts.google.com/o/oauth2/token
メール受信vbscriptサンプルは以下のようになります。
'' gmailrcv.vbs
Set bobj = CreateObject("basp21pro")
bobj.Env="gmail1"
''''' パスワードとして XOAUTH2(固定値)を指定
ar = bobj.RcvMail("xxx@xxxx.co.jp","XOAUTH2","stat")
POP3プロトコルのコマンドシーケンスは、以下のようになります。
S: +OK Gpop ready for requests from .....
C: AUTH XOAUTH2 dXNlcj10Y.....................
S: +OK Welcome.
C: STAT
S: +OK 255 10389053
   [接続が続きます...]


[ホーム] [会社概要] [製品] [サポート]
[BASP21 Pro] [FAQ] [アプリケーションガイド] [ユーザガイド] [リファレンス] [サンプル]
[FTP オブジェクト] [ソケット オブジェクト]

Copyright © 2001-2022 B21Soft, Inc. All Rights Reserved.