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=" & rcSMTPプロトコルのコマンドシーケンスは、以下のようになります。
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 [接続が続きます...]