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つを選択して追加します。
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=".......認証コード..............." '==============================================
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 [接続が続きます...]