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

BASP21 Pro Gmail SMTP/POP3/IMAP4 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/IMAP4サーバーPOP3 pop.gmail.com:995
IMAP4 imap.gmail.com:993
imapoptionIMAP4オプションIMAP4 のみ。受信フォルダ(imapfolder=)や受信件数の上限など

注※ 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以降でサポートされます。
RcvMailメソッドの IMAP4 受信は、BASP21 Proバージョン【1,0,2610,19】以降でサポートされます。
IMAP4 は POP3 と同じ OAuth2 パラメータ(client_id、client_secret、refresh_token)を使います。スコープ https://mail.google.com/ で SMTP・POP3・IMAP4 共通なので、POP3 で設定済みならトークンの再取得は不要です。

■ 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
   [接続が続きます...]


■ RcvMail IMAP4 受信サンプル(VBScript)

RcvMailメソッドは、popserver のポート番号が 993 または 143 のとき IMAP4 で受信します。
OAuth2 の設定は POP3 と同じです。popserver を imap.gmail.com:993 に変更するだけで IMAP4 で受信できます。
IMAP4 では、サーバ側で検索して該当するメールだけを受信できます。

POP3 と IMAP4 の設定の違いは以下のとおりです。
項目POP3IMAP4
popserverpop.gmail.com:995imap.gmail.com:993
client_id / client_secret / refresh_token取得済みの値同左(共通)
scopehttps://mail.google.com/同左
RcvMail のパスワードXOAUTH2XOAUTH2
ユーザ名の recent: 接頭辞指定可(直近30日分を取得)指定不要(指定しても自動で取り除きます)

注:Gmail の IMAP4 はポート 993 (SSL/TLS) のみです。ポート 143 (STARTTLS) では接続できません。

basp21p.iniファイルの設定例です。popserver を imap.gmail.com:993 にします。
[gmail-imap]
allow=all
logfile=c:\wk\gmail-imap-log.txt
popserver=imap.gmail.com:993
client_id=クライアントID1
client_secret=クライアントシークレット1
refresh_token=リフレッシュトークン1
token_uri=https://accounts.google.com/o/oauth2/token
imapoption=imapfolder=INBOX,imapmaxhits=500
メール受信vbscriptサンプルは以下のようになります。
'' gmailimap.vbs
Set bobj = CreateObject("basp21pro")
bobj.Env="gmail-imap"
user = "xxx@gmail.com"

'' メール数と総バイト数
''''' パスワードとして XOAUTH2(固定値)を指定
ar = bobj.RcvMail(user,"XOAUTH2","STAT")
If isarray(ar) Then
  msg= "done: メール数:" & replace(ar(0)," ","   バイト数:")
Else
  msg = bobj.lastmsg
End If
wscript.echo msg

'' 新着メールを受信(受信済みのファイルはスキップ)
files = bobj.RcvMail(user,"XOAUTH2","SAVENEW","c:\mail\gmail-inbox")

'' サーバ側で検索して該当メールだけ受信
'' 10/1 以降の未読で、件名に「請求書」を含むメール
files = bobj.RcvMail(user,"XOAUTH2", _
        "SAVESEARCH UNSEEN SINCE 2026/10/01 SUBJECT ""請求書""","c:\mail\seikyu")
If isarray(files) Then
  For Each f In files
    arr = bobj.ReadMail(f,"subject:from:date:")
  Next
End If

'' 未読メール数のみ
ar = bobj.RcvMail(user,"XOAUTH2","COUNT UNSEEN")
wscript.echo "未読 " & ar(0) & " 件"

'' フォルダ一覧
ar = bobj.RcvMail(user,"XOAUTH2","FOLDERS")
IMAP4プロトコルのコマンドシーケンスは、以下のようになります(STAT の例)。
S: * OK Gimap ready for requests from .....
C: B0001 AUTHENTICATE XOAUTH2 dXNlcj10Y.....................
S: B0001 OK xxx@gmail.com authenticated (Success)
C: B0002 CAPABILITY
S: B0002 OK Success
C: B0003 EXAMINE "INBOX"
S: B0003 OK [READ-ONLY] INBOX selected. (Success)
C: B0004 FETCH 1:* (UID INTERNALDATE RFC822.SIZE)
S: B0004 OK Success
C: B0005 LOGOUT
S: B0005 OK 73 good day (Success)
IMAP4 で使える RcvMail コマンド
POP3 と同じコマンドに加えて、サーバ側で検索するコマンドが使えます。
コマンド説明戻り値の配列
STATメール数と総バイト数"件数 総バイト数"
LIST [n[-n2]]Subject、From、Date ヘッダーPOP3 と同じ形式の後ろにタブ区切りで "UID: UIDVALIDITY-UID"
SAVE / SAVD n[-n2]受信(SAVD は受信後に削除)ファイル名
SAVEALL / SAVEALLD全メールを受信(D は受信後に削除)ファイル名
SAVENEW / SAVENEWD受信済みファイルがないメールを受信(D は受信後に削除)ファイル名
DELE n[-n2]削除削除件数
DELU ファイル名,...受信したファイル名のメールをサーバから削除削除件数
SEARCH 検索条件サーバ側で検索LIST と同じ形式
COUNT 検索条件サーバ側で検索して件数のみ返す件数
SAVESEARCH / SAVESEARCHD 検索条件サーバ側で検索して受信(D は受信後に削除)ファイル名
FOLDERSフォルダ一覧フォルダ名

受信したメールファイル名は次の形式です。
  受信日時_imap_UIDVALIDITY-UID     例:20261016091530_imap_14-4521
UID はフォルダごとの番号です。フォルダごとに保存ディレクトリ(dirname)を分けてください。
参照のみのコマンドでは、フォルダを読み取り専用で開くため、受信しても既読になりません。
メールファイルの形式は POP3 と同じです。ReadMailメソッドとSortMailメソッドがそのまま使えます。

Gmail のフォルダ(ラベル)
Gmail では、ラベルが IMAP4 のフォルダになります。主なフォルダ名は以下のとおりです。
  INBOX                    受信トレイ
  [Gmail]/すべてのメール   アーカイブ済みを含むすべてのメール
  [Gmail]/送信済みメール   送信済み
  [Gmail]/迷惑メール       迷惑メール
  [Gmail]/ゴミ箱           ゴミ箱
  ラベル名                 ユーザが作成したラベル(例:"請求書"、"取引先/A社")
日本語のフォルダ名もそのまま指定できます。 例:imapoption=imapfolder=[Gmail]/すべてのメール
フォルダ名は Gmail の表示言語によって異なります。FOLDERS コマンドで確認してください。
[Gmail]/すべてのメール は件数が多いため、SINCE などで対象を絞り込んで使ってください。

Gmail は日本語(UTF-8)のサーバ側検索に対応しています。
日本語を含む SUBJECT/FROM/TO/BODY/TEXT などの条件も、サーバ側で高速に検索します。
  例:SAVESEARCH SINCE 2026/10/01 SUBJECT "請求書"

Gmail での削除
Gmail では、INBOX から削除(DELE、DELU、SAVD、SAVESEARCHD など)したメールは、
Gmail の設定により、アーカイブ([Gmail]/すべてのメール に残る)またはゴミ箱へ移動されます。
Gmail の [設定]-[メール転送と POP/IMAP]-[IMAP アクセス] で動作を確認してください。
受信フォルダや受信件数の上限などは、imapoptionパラメータで指定します。 詳細は、imapoptionパラメータと RcvMailメソッドを参照してください。

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

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