
OAuth2認証でSendMail/RcvMailメソッドを実行するには以下の手順が必要です。
| basp21p.iniパラメータ | 名前 | 説明 |
|---|---|---|
| client_id | クライアントID | Google OAuthクライアントID |
| client_secret | クライアントシークレット | Google Oauthクライアントシークレット |
| refresh_token | リフレッシュトークン | リフレッシュトークン。有効期限は無期限 注※ |
| token_uri | アクセストークン取得URL | Google Token API https://accounts.google.com/o/oauth2/token |
| server | Gmail SMTPサーバー | smtp.gmail.com:465 TLS smtp.gmail.com:587 |
| mailfrom | MailFrom | 送信元メールアドレス,Gmail(G Suite)アカウント:OAUTHBEARER|XOAUTH2 |
| popserver | Gmail 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:\>インストールされてない場合は、インストールが必要です。
1. 新しいプロジェクトを作成します。
任意の名前でかまいません。

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

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

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

[アプリケーションの種類]-[ウェブアプリケーション]を選択します。
[名前]は、任意な名前を入力します。
[承認済みのリダイレクトURI]は、http://localhost/notarealpage を入力します。

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

ツール(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=".......認証コード..............." '==============================================
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 ファイルの内容。 ' フェーズAで取得したリフレッシュトークンをセット 初期値は"" (変更前) REF="" (変更後) REF=".......リフレッシュトークン..............." '==============================================リフレッシュトークンには、有効期限はありません。
以下のような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 ファイルにコピペします。
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:[接続が続きます...]
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 [接続が続きます...]