OAuth2認証でSendMail/RcvMailメソッドを実行するには以下の手順が必要です。
basp21p.iniパラメータ | 名前 | 説明 |
---|---|---|
client_id | クライアントID | クライアントID |
client_secret | クライアントシークレット | クライアントシークレット |
refresh_token | リフレッシュトークン | リフレッシュトークン |
token_uri | アクセストークン取得URL | OAuth 2.0 トークン エンドポイント (v2) https://login.microsoftonline.com/(テナントID)/oauth2/v2.0/token |
server | office365 SMTPサーバー | Smtp.office365.com TLS Smtp.office365.com:587 |
mailfrom | MailFrom | 送信元メールアドレス,office365アカウント:XOAUTH2 |
popserver | office365 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:\>インストールされてない場合は、インストールが必要です。
-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エラーとなります。
1. アプリケーションの登録。
任意の名前でかまいません。
リダイレクトURL。http://localhost/myapp/。
2. クライアントIDとテナントIDをコピー。
3. クライアントシークレット作成&コピー
任意の説明。任意の有効期限。追加をクリック。
ここで1年や2年を指定すると期限後に
BASP21 Pro メールによるSMTP/POP3 アクセスが失敗します。
その場合、新規にクライアントシークレット作成して、
承認エンドポイントから[認証コード]を取得する必要があります。
シークレットをコピーします。
4. APIのアクセス許可の追加
[APIのアクセス許可]-[アクセス許可の追加]をクリック。
[Microsoft Grapf]-[委任されたアクセス許可]をクリック。
以下の3つを選択して追加します。
ツール(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=".......認証コード..............." '==============================================
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 ファイルの内容。 ' フェーズ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://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 ファイルにコピペします。
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=" & rcSMTPプロトコルのコマンドシーケンスは、以下のようになります。
C: AUTH XOAUTH2 S: 334 C: dXNlcj10Y...................... S: 235 2.7.0 Authentication successful C: MAIL FROM:[接続が続きます...]
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 [接続が続きます...]