SMAIL/ Gmail SMTP OAuth2 認証の利用・設定

2020/11/01

初版

2021/06/22 第 2 版
2021/09/10 第 3 版
2022/03/27 第 4 版
2022/04/05 第 5 版

1

－目次－

１．概要
１）準備――――――――――――３２）設定――――――――――――３３）動作確認――――――――――――３

２．詳細①Google API Console で OAuth 2.0 クライアント用の[クライアント ID]および――――――――――――４[クライアントシークレット]の取得
１）新しいプロジェクトの作成――――――――――――４２）OAuth 同意画面を[作成]――――――――――――５３）OAuth クライアント ID を作成――――――――――――８４）デスクトップ のクライアント ID の JSON ファイルのダウンロード―― ９②Google OAuth API で[リフレッシュトークン]を取得 ―――――――――――１１
１）SmailRefreshToken.exe を起動させます―――――――――――１１③SmailRefreshToken.exe で正しくリフレッシュトークンが取得できれば、実行フォルダーに、smail_refreshtoken.ini が生成されます――――――――――――１３④smail_refreshtoken.ini を smail.exe と同じフォルダーにコピーし、smail.exe を起動して、smtp 認証に OAUTH-XOAUTH2 を選択すれば利用できます ――――――――――――１４
３．動作確認――――――――――――１５

４．OAUTH 関連エラー例――――――――――――１６2１．概要１）準備
Google アカウントが必要です。（本参考例は Gmail 無料アカウントです。G Suite アカウントもほぼ同じです）※実際の設定方法は２．詳細を参照して下さい。
① Google API Console で OAuth 2.0 クライアント用の[クライアント ID]と[クライアントシークレット]の取得をブラウザアクセスで行います。
② Google OAuth API で[リフレッシュトークン]を取得
付属の SmailRefreshToken.exe で行います。 認証はデフォルトのブラウザーが起動します。
ここまでで、SMAIL で OAuth2 認証を利用するための各種情報が取得できます。
この操作は一度のみです。ただし、Google アカウントのパスワード変更等を行った場合はリフレッシュトークンの再取得（SmailRefreshToken.exe）が必要です。

２）設定③ SmailRefreshToken.exe で正しくリフレッシュトークンが取得できれば、実行フォルダーに、smail_refreshtoken.ini が生成されます。
④ smail_refreshtoken.ini を smail.exe と同じフォルダーにコピーし、smail.exe を起動して、smtp 認証に OAUTH-XOAUTH2を選択すれば利用できます。
※SMTP ユーザ ID,SMTP パスワードを設定していても無視されます。（OAUTH-XOAUTH2 では必要が無いため）

3) 動作確認以降、SMAIL は、リフレッシュトークンを利用してアクセストークンを自動で取得し、OAuth 2.0 認証でメールを送信できるようになります。

OAuth 2.0 認証の動作 OS：
OSWindows
Server2008 sp2Windows
Server2008 R2WindowsServer 2012

WindowsServer 2016

Windowsxp

Windows
7 pro

Windows
8.1

Windows
10 proOAuth 2.0
認証

△(*1)

○○○×○○○(*1)
KB4019276 パッチを利用し、TLS1.2 を利用可にすれば動作可能です。（Windows Server 2008 sp2 64BIT 版検証済み）
https://support.microsoft.com/ja-jp/help/4074621/add-rds-support-for-tls-1-1-and-tls-1-2-in-windows-server-2008-sp2

3

２．詳細 (実際の取得方法)① Google API Console で OAuth 2.0 クライアント用の[クライアント ID]および[クライアントシークレット]の取得
Google API Console (https://console.cloud.google.com/apis/)にアクセスする。
Google アカウントでログインします。
（本参考例は Gmail 無料アカウントです。G Suite アカウントもほぼ同じです。この処理は一度だけです。）
1.） 新しいプロジェクトの作成
プロジェクト名は任意の名前です。

[新しいプロジェクト]

4２）OAuth 同意画面を[作成]。
・外部を選択。G Suite であれば [User Type]、内部が選択できます。

OAuth 同意画面
・アプリ名（必須）
名前は任意の名前ですが短すぎたり一般名称を登録しようとすると。「アプリの保存中にエラーが発生しました」と保存時エラーが出た場合はアプリ名を変更して試してください。例では smail20220327 としました。
・ユーザサポートメール(必須) 適宜設定してください。
・デベロッパーの連絡先情報（必須）適宜設定してください。

5

「保存して次へ」

6

OAuth 同意画面‐スコープ

何も変更せずそのまま「保存して次へ」

7

OAuth 同意画面‐スコープ‐テストユーザ[+ADD USERS]でテストユーザ（gmail アカウントのメールアドレス）を入力して保存します。
ここでは、この画面にログインしている google アカウントの gmail アドレスを登録します。
以後の SmailRefreshToken.exe で登録する gmail アカウントもこれと同じになります。
テストユーザを追加できたら「保存して次へ」

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

8

[アプリケーションの種類]-[デスクトップアプリ]を選択します。

[名前]は、任意な名前を入力し、「作成」をクリックします。

JSON ファイルをダウンロードしてください。
後で SmailRefreshToken.exe で登録に使用します。
（JSON ファイルは認証情報画面でいつでもダウンロード可能です）
クライアント ID、クライアント シークレット等の必要な情報が記載されています。
・ファイル名：client_secret_xxxxxxxxxxogleusercontent.com.json
これで、Google API Console (https://console.cloud.google.com/apis/)で登録する作業は終了です。

9

Oauth 同意画面で公開ステータスを「テスト」から「本番環境」に変更します。

※公開ステータスが「テスト」のままの場合、リフレッシュトークンの有効期限が７日となり、期限切れの場合に SmailRefreshToken.exe でリフレッシュトークンの再取得が都度必要になります。
かならず、テスト以外は「本番環境」に設定してください。

10

② Google OAuth API で[リフレッシュトークン]を取得
１） Smail 付属アプリの SmailRefreshToken.exe を起動させます。
① で使用したメールアドレスと取得した設定用ＪＳＯＮファイルを取り込みます。

正しく、ＪＳＯＮファイルが取り込めると、クライアント ID,シークレット値が表示されます。
トークン URI,承認 URI も自動的に更新されます。（通常は初期表示の内容と同じで、見た目は変わりません）（※設定用ＪＳＯＮファイルを使用せず、クライアント ID,シークレット値を直接入力しても問題ありません）[リフレッシュトークンの作成] をクリックします。
（このボタンをクリックすることで、Google API サーバへ承認接続し、リフレッシュトークンを取得します。）

11

確認ダイアログが表示されますので、[OK] ボタンをクリックしてください。(リクエストのメールアドレスは正しいか、再確認してください）[続行]をクリックしてください。

※承認エラーが出る場合は「OAuth 同意画面‐ストユーザ」で正しくユーザが登録されているか確認してください[続行]をクリックしてください。

12

③ SmailRefreshToken.exe で正しくリフレッシュトークンが取得できれば、実行フォルダーに、smail_refreshtoken.ini が生成されます。
・成功するとデフォルトのブラウザーに以下のように表示されます。

・SmailRefreshToken.exe 以下のダイアログメッセージが表示されます。
[OK]を押して[終了]させてください。

※リフレッシュトークンの再取得が必要な時はこの操作をします。通常は一度だけ取得すれば OK ですが、Google アカウントのパスワード変更の時は再取得が必要となります。

13

また、また、リフレッシュトークン
リフレッシュトークンが６カ月間使用
リフレッシュトークン
使用されなかったされなかった場合も再取得再取得が必要必要です。
（smmail で gmaill を使ってメールメール送信しないしない期間が６６カ月間あったあった場合は再取得再取得が必要です）
です）
尚、ここまでの操作は SMAIL を動作させない PC 上で行っても問題ありません。
④smail_refreshtoken.ini
mail_refreshtoken.ini を smail.exe と同じフォルダーにコピーし、と同じフォルダーにコピーし、smail.exe
smail.exe を起動して、を起動して、smtp 認証にOAUTH-XOAUTH2XOAUTH2 を選択すれば利用できます。
１）実行フォルダーに実行フォルダーにリフレッシュトークン
実行フォルダーにリフレッシュトークン
リフレッシュトークン等が記載された等が記載された INI ファイル、smail_refreshtoken.ini
ファイル、smail_refreshtoken.iniが生成されていますので、smail.exeが生成されていますので、または smail.ini のあるフォルダーにコピーして下さい。
以後、以後、smail_refreshtoken.ini
smail_refreshtoken.ini のファイルが SMAIL を実行する PC に必要です。
例）smail_refreshtoken.in
smail_refreshtoken.in
smail_refreshtoken.ini[OAUTH2]
UserID=
UserID=??????????
??????????@gmail.com@gmail.com
ClientID=
ClientID=8888888888888
8888888888888-stcv
stcvxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxapps.googleusercontent.com
apps.googleusercontent.com
ClientSecret=v
ClientSecret=vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXyq0VUOjLA
yq0VUOjLA
RefreshToken=1//0e
RefreshToken=1//0exxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
TokenURI=https://oauth2.googleapis.com/token
２）SMAIL.exe
SMAIL.exe を起動し SMTP 認証：OAUTHOAUTH-XOATH2
XOATH2 を選択して保存して下さい。

[保存]して終了して下さい。
して終了して下さい。
refreshtoken.ini が見つからない場合は以下のが見つからない場合は以下の警告が出ます。正しく警告が出ます。正しく INI ファイルを作製して下さい。

smail.ini に設定が保存されます。（既存の smail.ini に引き継がれます）

14

３．動作確認例）c>smail -hsmtp.gmail.com -s"TEST MAIL" –fxxxxxx@gmail.com dummy@exsample.jp -d -i#---------------------- SMAIL 4.26 Information By Eva ------------------#設定ファイル: [C:\work\vc\free\smail_v4.26_free_ssl_gui-vc2010\Release\smail.ini]#POP before SMTP
: 使わない#APOP: 使わない#SMTP 認証
: 使う AUTH XAUTH2 を利用#設定ファイル(OAUTH 用) : [C:\work\vc\free\smail_v4.26_free_ssl_gui-vc2010\Release\smail_refreshtoken.ini]#API アカウント): [xxxxxxx@gmail.com]#SMTP アカウント:#SMTPS (SMTP over SSL) : 使う[OpenSSL 1.1.1h]#SSL 方式: TLS1.3-1.0,SSLv2,v3 自動#STARTTLS: 使わない#本文ファイル：なし#添付ファイル：なし#メールサーバ：smtp.gmail.com#メール送り元：xxxxx@gmail.com#メール送り先：dummy@example.jp#サブジェクト内容：TEST MAIL
#キャラクターセット：ISO-2022-JP#エンコーディング：7bit
SSL connection using TLS_AES_256_GCM_SHA384 - TLSv1.3
X509 subject_name: /C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com
X509 issuer_name: /C=US/O=Google Trust Services/CN=GTS CA 1O1
Recv:[52 bytes] 220 smtp.gmail.com ESMTP 10sm8435678pjt.50 - gsmtp
Send: EHLO xxxxxx
Recv:[220 bytes] 250-smtp.gmail.com at your service, [xx.xx.xx.xx]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8[250 message ok!]
[Try get access token from https://oauth2.googleapis.com/token] ; 認証サーバにアクセストークン要求[access_token=ya29.A0AfH6SMDzH_2_0....]；アクセストークン取得
Send: AUTH XOAUTH2 ****************************************；XOAUTH2 で接続要求
Recv:[20 bytes] 235 2.7.0 Accepted
Send: MAIL FROM:<XXXXXX@gmail.com>
Recv:[40 bytes] 250 2.1.0 OK 10sm8435678pjt.50 - gsmtp
Send: RCPT TO:<xxxxx@xxxxxxxxxxx.jp>
Recv:[40 bytes] 250 2.1.5 OK 10sm8435678pjt.50 - gsmtp
Send: DATA
Recv:[41 bytes] 354 Go ahead 10sm8435678pjt.50 - gsmtp
Send: From: XXXXXXX@gmail.com
To: dummy@example.jp
Subject: TEST MAIL
X-Mailer: SMAIL 4.26
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
Date: Sun, 01 Nov 2020 15:44:39 +0900
Send:#//メールヘッダー送信完了(1.609sec)....
Send:.
Recv:[52 bytes] 250 2.0.0 OK 1604213082 10sm8435678pjt.50 - gsmtp
Send: QUIT
Recv:[56 bytes] 221 2.0.0 closing connection 10sm8435678pjt.50 - gsmtp
C:\work\vc\free\smail_v4.26_free_ssl_gui-vc2010\Release>

・SMAIL は SSL 通信に OPENSSL ライブリーを使っていますが、OAUTH のアクセストークン取得部分のみ、

15

google への https プロトコルは、標準 Windows 関数を使用しております。従って、使用端末が tls1.2 以降をサポートしている必要があります。

OAuth 2.0 認証の動作 OS：
OSWindowsServer2008 sp2

Windows
Server2008 R2WindowsServer 2012

WindowsServer 2016

Windowsxp

Windows
7 pro

Windows
8.1

Windows
10 proOAuth 2.0
認証

△(*1)

○○○

×○

○

○

(*1) KB4019276 パッチを利用し、TLS1.2 を利用可にすれば動作可能です。（Windows Server 2008 sp2 64BIT 版検証済み）
https://support.microsoft.com/ja-jp/help/4074621/add-rds-support-for-tls-1-1-and-tls-1-2-in-windows-server-2008-sp2
・プロキシー対応です。ｈｔｔｐｓアクセスに端末のプロキシー情報を利用しています。

４．OAUTH 関連エラー例
エラー番号２８が発生した時は、オプションに –d を付けて通信内容をコンソールに表示して詳細なエラーを取得して下さい。

1.Error HttpSendRequest [12157][250 message ok!]
[Try get access token from https://oauth2.googleapis.com/token]
Error HttpSendRequest [12157]
ERR-0028:OAUTH 認証サーバからアクセストークンが取得できませんでした。
12157 セキュリティ・チャネル・エラー
SSL ライブラリのロード中に、アプリケーションに内部エラーが発生しました

2.Error HttpSendRequest [12045][250 message ok!]
[Try get access token from https://oauth2.googleapis.com/token]
Error HttpSendRequest [12045]
ERR-0028:OAUTH 認証サーバからアクセストークンが取得できませんでした。
12045 無効な認証局です
サーバーSSL 証明書は、未知または無効な認証局から発行されたものです。
PC が TSL1.2 をサポートしていない場合のエラーです。

3.Error HttpSendRequest [12029][250 message ok!]
[Try get access token from https://oauth2.googleapis.com/token]
Error HttpSendRequest [12029]
ERR-0028:OAUTH 認証サーバからアクセストークンが取得できませんでした。
12029 サーバー接続の試みに失敗しました
プロキシー設定が間違っており接続できない場合もこのエラーが出ます。

16

4. Error InternetCrackUrl [12006][250 message ok!]
[Try get access token from https://oauth2.googleapis.com/token]
Error InternetCrackUrl [12006]
ERR-0028:OAUTH 認証サーバからアクセストークンが取得できませんでした。
12006 不正な URL ですsmail_refreshtoken.ini 等が参照できず TokenURI が参照できない場合発生します。
もしくは smail_refreshtoken.ini 中の TokenURI の URL の記述が間違っています。

5. Error HTTP_STATUS [400][250 message ok!]
[Try get access token from https://oauth2.googleapis.com/token]
Error HTTP_STATUS [400]ERR-0028:OAUTH 認証サーバからアクセストークンが取得できませんでした。

OAuth 同意画面でプロジェクトの公開ステータスがテストで７日間の有効期限切れでリフレッシュトークン切れです。公開ステータスを本番環境に設定して、smail_refreshtoken.exe で再度リフレッシュトークンを作成してください。

またはリフレッシュトークンが６カ月間使用されなかった場合の期限切の場合もあります。
（smail で gmail を使ってメール送信しない期間が６カ月間あった場合は再取得が必要です）

17