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

BASP21 Pro Office365 SMTP/POP3 OAuth2認証 (SendMail/RcvMail)

SendMail/RcvMailメソッドでOffice365 OAuth2認証でアクセスする方法を説明します。

OAuth2認証でSendMail/RcvMailメソッドを実行するには以下の手順が必要です。

Azure AD によって提供されるOAuth認証サービスを使用して、 BASP21 Pro がSMTP/POPプロトコルを使用してメールを送受信することができます。

basp21p.iniパラメータは、以下のように設定が必要です。
basp21p.iniパラメータ名前説明
client_idクライアントIDクライアントID
client_secretクライアントシークレットクライアントシークレット
refresh_tokenリフレッシュトークンリフレッシュトークン
token_uriアクセストークン取得URLOAuth 2.0 トークン エンドポイント (v2)
https://login.microsoftonline.com/(テナントID)/oauth2/v2.0/token
serveroffice365 SMTPサーバーSmtp.office365.com
TLS Smtp.office365.com:587
mailfromMailFrom送信元メールアドレス,office365アカウント:XOAUTH2
popserveroffice365 POPサーバーOutlook.office365.com:995



basp21p.iniファイルに設定が必要なパラメータを取得するために 承認エンドポイント/トークンエンドポイントを呼出します。
その際にコマンドプロンプトで 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は、Azure ADからOAUth2パラメータ取得に必要です。


参考: OAuth を使用して IMAP、POP、または SMTP 接続を認証する

重要: Azure AD が発行するトークンの有効期間について
更新トークンの有効期限は90日です。
更新トークンの有効期限が切れると以下のようなエラーでメソッドが失敗します。
-86	OAUTH2認証エラー。

(ログ)
2020/11/02 16:20:07.216 3948-6294376 office365(32bit WOW64) RcvMail HTTP > POST /a7a81c19-a273.....
2020/11/02 16:20:07.528 3948-6294376 office365(32bit WOW64) RcvMail HTTP < HTTP/1.1 400 Bad Request
2020/11/02 16:20:07.528 3948-6294376 office365(32bit WOW64) RcvMail ERROR:-52 [SYSTEM]server error HTTP/1.1 400 Bad Request
2020/11/02 16:20:07.528 3948-6294376 office365(32bit WOW64) RcvMail end -86  (842msec)

トークンサーバーのアクセスでHTTP 400エラーとなります。


参考: Microsoft ID プラットフォームでの構成可能なトークンの有効期間 (プレビュー)

office365 OAuth2認証は、バージョン 1,0,2007,17以降でサポートされます。

■ Azure ADアプリケーションを登録[クライアントID]と[クライアントシークレット]取得(ブラウザ)

[クライアントID]と[クライアントシークレット]は、ブラウザを使って取得します。
Azure Portalにログインして、アプリケーション登録します。

1. アプリケーションの登録。
任意の名前でかまいません。

リダイレクトURL。http://localhost/myapp/。



2. クライアントIDとテナントIDをコピー。




3. クライアントシークレット作成&コピー
任意の説明。任意の有効期限。追加をクリック。
ここで1年や2年を指定すると期限後に BASP21 Pro メールによるSMTP/POP3 アクセスが失敗します。
その場合、新規にクライアントシークレット作成して、 承認エンドポイントから[認証コード]を取得する必要があります。




シークレットをコピーします。



4. APIのアクセス許可の追加
[APIのアクセス許可]-[アクセス許可の追加]をクリック。




[Microsoft Grapf]-[委任されたアクセス許可]をクリック。




以下の3つを選択して追加します。


APIアクセス許可の要求選択方法は、[アクセス許可を選択する]テキストボックスに、OFF  でエンターキー、
  offline_access
  Maintain access to data you have given it access to
を選択。

次に
POP でエンターキー、
  POP.AccessAsUser.All
  Read and write access to mailboxes via POP.
を選択。

次にSMTP を入力して
  SMTP.Send
  Send emails from mailboxes using SMTP AUTH.
を選択します。





■ 承認エンドポイントから[認証コード]を取得(ブラウザ)

[認証コード]は、ツールとブラウザを使って取得します。
この処理は、再取得が必要になったとき、実行が必要です。

ツール(office365-oauth2.vbs ファイル)のダウンロードは、 こちら。

使用するscope は、以下の通りです。
POP ..... https://outlook.office.com/POP.AccessAsUser.All
SMTP .... https://outlook.office.com/SMTP.Send

1. ツールで認証コードを取得
office365-oauth2.vbs ファイルをエディタで開いて、●●部分を埋め込みます。


office365-oauth2.vbs ファイルの内容。
''==============================================
'' ログファイルセット
LOGFILE="C:\●●slog.txt"
'' curl トレースファイルセット
CURLTRACE1="--trace-ascii C:\●●clog1.txt"
CURLTRACE2="--trace-ascii C:\●●clog2.txt"

'クライアントIDをセット
CID="●●"
'クライアントシークレットをセット
CSS="●●"
'テナントIDをセット
TID="●●"
'==============================================

office365-oauth2.vbs ファイルをダブルクリックして実行します。


2.認証コード取得
ブラウザが自動起動しますので認証コードを取得します。

ブラウザでURLを叩くと同意画面が表示されます。
使用するアカウントを選択。
このとき、BASP21 Pro で使うメールアドレスで認証してください。

ツールで再度、認証コード取得からやり直す場合は、 以下のように2つの変数をクリアしてください。

office365-oauth2.vbs ファイルの内容。
'' 変数クリア
ACC=""
REF=""




[承諾]をクリック。




ブラウザのURL部分で表示される認証コードをコピーして、 office365-oauth2.vbs ファイル内にセットします。
?code=xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxの部分です。

office365-oauth2.vbs ファイルの内容。

' フェーズ@で取得した認証コードをセット 初期値は""
(変更前)
ACC=""

(変更後)
ACC=".......認証コード..............."
'==============================================


■ トークンエンドポイントから[トークン]と[リフレッシュトークン]を取得(curl)

ツールでcurl コマンドを実行して、トークンエンドポイントにアクセスしてリフレッシュトークンを取得します。
このステップ実行の前に、 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:\>
office365-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=...." -d "grant_type=authorization_code"
 -d "access_type=offline......" https://login.microsoftonline.com/..../oauth2/v2.0/token

curl grant_type=authorization_code..... done.

{
{
  "token_type":"Bearer",
  "scope":"https://outlook.office365.com/POP.AccessAsUser.All https://outlook.office365.com/SMTP.Send",
  "expires_in":3599,
  "access_token": "...............",
  "refresh_token": "..............",
}
access_token=.................
refresh_token内容を 変数REFに設定
refresh_token=..................

done.
このjsonレスポンスで必要なものは、リフレッシュトークンのみです
リフレッシュトークンをoffice365-oauth2.vbs ファイルにセットします。
office365-oauth2.vbs ファイルの内容。

' フェーズAで取得したリフレッシュトークンをセット 初期値は""
(変更前)
REF=""

(変更後)
REF=".......リフレッシュトークン..............."
'==============================================

■ トークンエンドポイントからアクセストークン取得テスト(curl)


ツールで curl コマンドを実行して、アクセストークンを取得テストします。
oofice365-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://login.microsoftonline.com/.../oauth2/v2.0/token

curl grant_type=refresh_token..... done.

{
  "token_type": "Bearer",
  "scope": "https://outlook.office365.com/POP.AccessAsUser.All https://outlook.office365.com/SMTP.Send",
  "access_token": ".....",
  "expires_in": 3599
}

リフレッシュトークンによるアクセストークン取得テスト完了
access_token=......

-------------- basp21p.ini -------------
[office365]
# 2020/../.. Office365 OAuth2
allow=all
server=TLS Smtp.office365.com:587
popserver=Outlook.office365.com:995
client_id=....
client_secret=....
token_uri=https://login.microsoftonline.com/..../oauth2/v2.0/token
refresh_token=.....
----------------------------------------
done.
最後に表示される basp21p.ini ファイルの設定項目をbasp21p.ini ファイルにコピペします。

■ SendMailサンプル(VBScript)

アクセストークン取得テストが完了したら準備完了です。
これでSendMailメソッドの実行準備ができました。
basp21p.ini ファイルとoffice365送信メールスクリプトのサンプル。
logfileパラメータでログファイルを指定して実行結果を確認できます。

basp21p.iniファイルに取得済みのパラメータを設定します。
[global]
license=....
allow=all
[office365]
allow=all
mailfrom=account,account:XOAUTH2
logfile=c:\wk\office365-log.txt
server=TLS Smtp.office365.com:587
popserver=Outlook.office365.com:995
client_id=....
client_secret=....
token_uri=https://login.microsoftonline.com/..../oauth2/v2.0/token
refresh_token=....
メール送信vbscriptサンプルは以下のようになります。
'' office365mailsend.vbs
Set bobj = CreateObject("basp21pro")
bobj.Env="office365"
mailto="送信先アドレス"
subject="件名1"
body="ハローoffice"
files=""
rc = bobj.SendMail(mailto,subject,body,files)
Wscript.Echo "done rc1=" & rc
SMTPプロトコルのコマンドシーケンスは、以下のようになります。
C: AUTH XOAUTH2
S: 334
C: dXNlcj10Y......................
S: 235 2.7.0 Authentication successful
C: MAIL FROM: 
   [接続が続きます...]


■ RcvMailサンプル(VBScript)

basp21p.ini ファイルとoffice365受信メールスクリプトのサンプル。
logfileパラメータでログファイルを指定して実行結果を確認できます。

basp21p.iniファイルに取得済みのパラメータを設定します。
[global]
license=....
allow=all
[office365]
allow=all
logfile=c:\wk\office365-log.txt
popserver=outlook.office365.com:995
client_id=クライアントID1
client_secret=クライアントシークレット1
refresh_token=リフレッシュトークン1
token_uri=https://login.microsoftonline.com/..../oauth2/v2.0/token
メール受信vbscriptサンプルは以下のようになります。
'' office365rcv.vbs
Set bobj = CreateObject("basp21pro")
bobj.Env="office365"
''''' パスワードとして XOAUTH2(固定値)を指定
ar = bobj.RcvMail("xxx@xxxx.co.jp","XOAUTH2","stat")
POP3プロトコルのコマンドシーケンスは、以下のようになります。
S: +OK The Microsoft Exchange POP3 service is ready.
C: AUTH XOAUTH2
S: +
C: dXNlcj10Y.....................
S: +OK User successfully authenticated.
C: STAT
S: +OK 255 10389053
   [接続が続きます...]


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

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