SMAIL/ Microsoft Office 365 SMTP OAuth2 認証の利用・設定

2021/06/22 初版
2021/09/10 1 版
2024/08/04 2 版

1－目次 －

１．概要
１）準備――――――――――――３２）設定――――――――――――３

３）動作確認――――――――――――３

２．詳細①Azure Active Director で OAuth 2.0 クライアント用の[クライアント ID]および[クライアントシークレット]の取得――――４１）新ナビゲーションメニューから「Azure Active Directory」を表示します――――４２）ナビゲーションメニューから[アプリの登録]-[+新規登録]――――４３）「アプリケーションの登録」画面で、アプリケーションの名前(任意の文字列)登録――――５４）[認証] – [+プラットフォームを追加] –[WEB]を選択します――――５５）リダイレクト URI を入力し[構成]ボタンをクリックします――――６６）ナビゲーションメニューから[証明書とシークレット]-[+新しいクライアント] ―――７
７）ナビゲーションメニューから[API のアクセス許可]-[+アクセス許可の追加] ――――８８）[委任されたアクセス許可]を選択、アクセス許可――――８９）概要でクライアント ID の確認――――１０②Azure Active Director で[リフレッシュトークン]を取得――――１０１）SmailRefreshToken.exe――――１２を起動させます２）ブラウザーでログイン許可設定をします――――１２③SmailRefreshToken.exe で正しくリフレッシュトークンが取得できれば、実行フォルダーに、smail_refreshtoken.ini が生成されます――――１２④smail_refreshtoken.ini を smail.exe と同じフォルダーにコピーし、smail.exe を起動して、smtp 認証に OAUTH-XOAUTH2 を選択すれば利用できます――――１２３．動作確認――――１５

４．OAUTH 関連エラー例――――１７2

１．概要
Azure Active Directory は Microsoft Entra ID にサービス名が変更になりました。(2024/03/05)

本文中の Azure Active Directory は Microsoft Entra ID に読み替えてください。
１）準備
Microsoft クラウド サービス | Microsoft Azure のアカウントが必要です。
（本参考例は MSDN の付属の Microsoft Azure を使用しております。）※実際の設定方法は２．詳細を参照して下さい。
① Azure Active Directory で OAuth 2.0 クライアント用の[クライアント ID]と[クライアントシークレット]の取得をブラウザアクセスで行います。
② Azure Active Directory で[リフレッシュトークン]を取得
付属の SmailRefreshToken.exe で行います。 認証はデフォルトのブラウザーが起動します。
ここまでで、SMAIL で OAuth2 認証を利用するための各種情報が取得できます。
この操作は一度のみです。ただし、クライアントシークレットの期限切れ等が発生した場合はリフレッシュトークンの再取得（SmailGmailRefreshToken.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：
OS

Windows
Server2008 sp2

Windows
Server2008 R2

Windows
Server 2012

Windows
Server 2016

Windowsxp

Windows
7 pro

Windows8.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

２．詳細 (実際の取得方法)① Azure Active Director で OAuth 2.0 クライアント用の[クライアント ID]および[クライアントシークレット]の取得
Azure Active Directory を操作できる管理者アカウントで Azure Portal( https://portal.azure.com/ )にログインする。
（本参考例は MSDN の付属の Microsoft Azure を使用しております。）
１） ナビゲーションメニューから「Azure Active Directory」を表示します。

２） ナビゲーションメニューから[アプリの登録]-[+新規登録]をクリックします。

３） 「アプリケーションの登録」画面で、アプリケーションの名前(任意の文字列)を入力し登録して下さい。

4

例では smail-common とします。
アカウントの種類は、任意の組織ディレクト内のアカウントと個人のＭicrofost アカウントを選択して下さい。

※smail は”任意の組織ディレクト内のアカウントと個人のＭicrofost アカウント“をデフォルトでサポートしておりますのでかならずこれを選択して下さい。
これにより各種エンドポイントの{tenant}の値の URI が異なってきます。この場合、{tenant}=common となります。
４） [認証] – [+プラットフォームを追加] –[WEB]を選択します。

５） リダイレクト URI を入力し[構成]ボタンをクリックします。

5http://localhost:8001/myapp/と入力します。（必ずこの URL）

Live SDK は必要なので”いいえ”を選択

SmailRefreshToken.exe は、http://localhost:8001/myapp/で待ち受けます。ポート 8001 を使用しますので、後で SmailRefreshToken.exe を実行する時に、お使いの PC でポート 8001 のサービスを使っている場合はそのサービスを停止するか、他の PC で行って下さい。
（通常の PC ではバッティングはありません。ウイルスソフトで内部的に proxy で 8001 を使用している場合があるかもしれません。）[参考]
Google API の場合は、リダイレクト URI に動的生成で SmailRefreshToken.exe の方から自動的に空きポートを選択して指定しておりますので、上記のような制約はありません。

６） ナビゲーションメニューから[証明書とシークレット]-[+新しいクライアント]をクリックします。

6

説明（任意の文字列：ここでは SMAIL-common とします）
有効期限を選択して下さい。

利用したい月数を選択。無期限があればそちらを選択して下さい。期限切れになった場合は、再度６）を実行します。

[追加]をクリックするとシークレット値が得られますので、ここでかならず、クリップボードに保管してメモ帳等に記録しておいて下さい。この画面を離れるシークレット値はコピ＆ペーストできなくなります。
もし、そうなった場合は再度、追加でシークレット値を再作成して下さい。

7７） ナビゲーションメニューから[API のアクセス許可]-[+アクセス許可の追加]をクリックします。「API アクセス許可の要求」画面をスクロールし、「Microsoft Graph」を選択します。

８） [委任されたアクセス許可]を選択し、次のアクセス許可をすべて選択します。
POP.AccessAsUser.All
SMTP.Send
offline_access8

設定内容を確認し、[アクセス許可の追加]をクリックします

User.Read は必要ありませんが、デフォルトで設定されていました。削除しても良いです。

9９） 概要でクライアント ID の確認

クライアント ID をコピー＆ペーストし、メモ帳に記録して下さい。
（クライアント ID と６）のシークレット値の２つで、SmailRefreshToken.exe からリフレッシュトークンを取得できるようになります）② Azure Active Director OAuth API で[リフレッシュトークン]を取得
１） SmailRefreshToken.exeを起動させます。

Oauth2.0 プロバイダーは Microsoft Azure を選択します。
連携したいメールアドレスと取得したクライアント ID、シークレット値を入力します。

10[リフレッシュトークンの作成] をクリックします。
（このボタンを押下することで、Microsoft Azure サーバへ承認接続し、リフレッシュトークンを取得します。）

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

デフォルトのブラウザーが起動し、マイクロソフトのログイン画面が表示されます。複数アカウントが表示される場合は、今回連携するメールアドレスを選択するか、別ログインして下さい。

11

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

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

12※リフレッシュトークンの再取得が必要な時はこの操作をします。
通常は一度だけ取得すれば OK ですが、期限切れの時は再取得が必要となります。
尚、ここまでの操作は SMAIL を動作させない PC 上で行っても問題ありません。

④smail_refreshtoken.ini を smail.exe と同じフォルダーにコピーし、smail.exe を起動して、smtp 認証にOAUTH-XOAUTH2 を選択すれば利用できます。
１）実行フォルダーにリフレッシュトークン等が記載された INI ファイル、smail_refreshtoken.iniが生成されていますので、smail.exe または smail.ini のあるフォルダーにコピーして下さい。
以後、smail_refreshtoken.ini のファイルが SMAIL を実行する PC に必要です。
例）smail_refreshtoken.ini[OAUTH2]
UserID=xxxxxxxxxxxxxx@outlook.com
ClientID=3bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ClientSecret=se4xxxxxxxxxxxxxxxxxxxxxxxxxxB
RefreshToken=M.R3_BAY.-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TokenURI=https://login.microsoftonline.com/common/oauth2/v2.0/token
OuthURI=https://login.microsoftonline.com/common/oauth2/v2.0/authorize
OAUTH2_TIME_OUT=30
Provider=113２）SMAIL.exe を起動し SMTP 認証：OAUTH-XOATH2 を選択して保存して下さい。
offce365 は、STARTLS のチェックが必要です。

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

smail.ini に設定が保存されます。（既存の smail.ini に引き継がれます）
以上で、全ての事前準備が終わりです。smail で Microsoft offce365 のメール送信が可能になります。

14

３．動作確認例）c>smail -hsmtp.office365.com -s"TEST MAIL" -fxxxxxxxxxxxx@outlook.com xxx@xxxxxx.xx -d -i#---------------------- SMAIL 4.29 Information By Eva ------------------#設定ファイル: [C:\work\vc\free\smail_v4.29_free_ssl_gui-vc2010\Release\smail.ini]#POP before SMTP
: 使わない#APOP: 使わない#SMTP 認証
: 使う AUTH XAUTH2 を利用#設定ファイル(OAUTH 用) : [C:\work\vc\free\smail_v4.29_free_ssl_gui-vc2010\Release\smail_refreshtoken.ini]#API アカウント): [xxxxxxxx@xxxxxxx.jp]#SMTP アカウント: xxxxxxxx@outlook.com#SMTPS (SMTP over SSL) : 使う[OpenSSL 1.1.1k]#SSL 方式: TLS1.3-1.0,SSLv2,v3 自動#STARTTLS: 使う#本文ファイル：なし#添付ファイル：なし#メールサーバ：smtp.office365.com#メール送り元：xxxxxxxx@outlook.com#メール送り先：xxxx@xxxxxxxxx.jp#サブジェクト内容：TEST MAIL
#キャラクターセット：ISO-2022-JP#エンコーディング：7bit
Recv:[111 bytes] 220 OS3PR01CA0017.outlook.office365.com Microsoft ESMTP MAIL Service ready at Tue, 22 Jun 2021 0
5:13:49 +0000
Send: EHLO xxxxxxxxx
Recv:[63 bytes] 250-OS3PR01CA0017.outlook.office365.com Hello [xxx.xxx.xxx.xxx]
Recv:[142 bytes] 250-SIZE 157286400
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8[250 message2 ok!]
Send: STARTTLS
Recv:[29 bytes] 220 2.0.0 SMTP server ready
SSL connection using ECDHE-RSA-AES256-GCM-SHA384 - TLSv1.2X509 subject_name: /C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=outlook.com
X509 issuer_name: /C=US/O=DigiCert Inc/CN=DigiCert Cloud Services CA-1
Send: EHLO xxxxxxxxxx
Recv:[215 bytes] 250-OS3PR01CA0017.outlook.office365.com Hello [219.75.132.65]
250-SIZE 157286400
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-AUTH LOGIN XOAUTH2
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8[250 message ok!]
[Try get access token from https://login.microsoftonline.com/common/oauth2/v2.0/token]；認証サーバにアクセストークン要求[access_token=EwA4A+l3BAAU0+FyEzrG....]；アクセストークン取得
Send: AUTH XOAUTH2 ****************************************；XOAUTH2 で接続要求
Recv:[37 bytes] 235 2.7.0 Authentication successful; 認証成功Send: MAIL FROM:<xxxxxxxxxx@outlook.com>
Recv:[21 bytes] 250 2.1.0 Sender OK
Send: RCPT TO:<xxx@xxxxxx.xx>
Recv:[24 bytes] 250 2.1.5 Recipient OK15

Send: DATA
Recv:[46 bytes] 354 Start mail input; end with <CRLF>.<CRLF>
Send: From: xxxxxxx1@outlook.comTo: xxxxxx@xxxxxxxx.jp
Subject: TEST MAIL
X-Mailer: SMAIL 4.29
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
Date: Tue, 22 Jun 2021 14:13:50 +0900
Send:#//メールヘッダー送信完了(2.640sec)....
Send:.
Recv:[146 bytes] 250 2.0.0 OK <SI2PR03MB5291274D9C18E46A7FBCEC25C0099@SI2PR03MB5291.apcprd03.prod.outlook.com> [Hostname=SI2PR03MB5291.apcprd03.prod.outlook.com]
Send: QUIT
Recv:[48 bytes] 221 2.0.0 Service closing transmission channel

C:\work\vc\free\smail_v4.29_free_ssl_gui-vc2010\Release>

・SMAIL は SSL 通信に OPENSSL ライブリーを使っていますが、OAUTH のアクセストークン取得部分のみ、google への https プロトコルは、標準 Windows 関数を使用しております。従って、使用端末が tls1.2 以降をサポートしている必要があります。

OAuth 2.0 認証の動作 OS：
OS

Windows
Server2008 sp2

Windows
Server2008 R2

WindowsServer 2012

Windows
Server 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・プロキシー対応です。ｈｔｔｐｓアクセスに端末のプロキシー情報を利用しています。

16

４．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 サーバー接続の試みに失敗しました
プロキシー設定が間違っており接続できない場合もこのエラーが出ます。

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 の記述が間違っています。

17