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

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

SendMail/RcvMailメソッドでOffice365 OAuth2認証でアクセスする方法を説明します。
認可フローのタイプは、クライアント資格情報付与フロー(クライアントクレデンシャルフロー)方式です。
Entraアプリケーションによって提供されるOAuth認証サービスを使用して、 BASP21 Pro がSMTP/POP/IMAPプロトコルを使用してメールを送受信することができます。

参考: OAuth を使用して IMAP、POP、または SMTP 接続を認証する(マイクロソフト社)
RcvMailメソッドの IMAP4 受信は、BASP21 Proバージョン【1,0,2610,19】以降でサポートされます。

Oauth2認証名称について、この文書では、マイクロソフト社の名称を用います。
Oauth2認証フロー名称認可コードフロークライアントクレデンシャルフロー
マイクロソフト社実装名称認証コードフロークライアント資格情報付与フロー
BASP21 Pro OAuth2認証リンクbasp21poauth2-365.html本ページ

本ページで説明するEntraアプリケーションおよびBASP21 Pro設定は、クライアント資格情報付与フローです。
BASP21 Proアプリケーションコードの変更は不要です。

注意:クライアント資格情報付与フロー方式は、BASP21 Proバージョン1,0,2501,4以降でサポートされます

認証コードフローとクライアント資格情報付与フローの違いを説明します。
項目認証コードフロークライアント資格情報付与フロー
アクセス許可の種類
参考: アクセス許可の種類(マイクロソフト社)
委任されたアクセス許可。
ユーザがアクセスできるメールボックスのみアクセス可能。
ユーザの同意画面でサインインが必要
管理者の同意が必要。
サービスプリンシパルでメールボックスのアクセス許可付与必要
アクセス許可APIの種類Microsoft Graph(3)
Smtp.Send,offline_access,POP.AccessAsUserAll
Office 365 Excange Online(2)
POP.AccessAsApp,SMTP.SendAsApp
IMAP4受信時は IMAP.AccessAsApp
アクセス対象メールアドレス設定方法リフレッシュトークン取得時の同意画面でサインインしたメールアドレス 管理者によるEntraアプリケーションのサービス プリンシパル登録
Add-MailboxPermissionコマンド、Add-RecipientPermissionコマンドで アクセス対象メールボックスへのアクセス許可
アクセストークン取得方法リフレッシュトークン使用 クライアントID、クライアントシークレット使用
リフレッシュトークンの更新90日毎に取得更新が必要。basp21p.iniに設定 不要
クライアントシークレット削除、有効期限切れ対応basp21p.iniに新クライアントシークレット設定必要 basp21p.iniに新クライアントシークレット設定必要
アクセス対象メールアドレス追加方法リフレッシュトークン取得時の同意画面で対象メールアドレスでサインオン
リフレッシュトークン取得して、basp21p.iniに新たなエントリ追加が必要。
サービスプリンシパルにメールアドレス許可追加
Add-MailboxPermissionコマンド、Add-RecipientPermissionコマンド
basp21p.iniは、リフレッシュトークンなしのため変更不要
メリット対象メールアドレス追加は、ユーザに委任のため、管理者許可が不要。
リフレッシュトークン取得時にメールアカウントでサインイン
basp21p.iniは、リフレッシュトークンなしのため変更不要
デメリット90日毎にリフレッシュトークン取得処理&basp21p.iniファイル設定が必要 対象メールアドレス追加時に管理者のメールアクセス許可操作が必要

クライアント資格情報付与フローでSendMail/RcvMailメソッドを実行するには以下の手順が必要です。


basp21p.iniパラメータは、以下のように設定が必要です。
basp21p.iniパラメータ名前説明
client_idクライアントIDクライアントID
client_secretクライアントシークレットクライアントシークレット
token_uriアクセストークン取得URLOAuth 2.0 トークン エンドポイント (v2)
https://login.microsoftonline.com/(テナントID)/oauth2/v2.0/token
serveroffice365 SMTPサーバーTLS Smtp.office365.com:587
popserveroffice365 POPサーバーOutlook.office365.com:995
popserveroffice365 IMAPサーバーOutlook.office365.com:993 (IMAP4 受信時)
imapoptionIMAP4オプションオプション。受信フォルダ(imapfolder=)や受信件数の上限など
oauth2_opttoken=nocacheオプション。アクセストークンをキャッシュせずに、毎回取得する

以下のように、Envエントリを分けて、旧方式と新方式の使い分けが可能です。

bobj.Env="office365-NEW"

bobj.Env="office365-OLD"

-------------- basp21p.ini -------------
[office365-NEW]
server=TLS Smtp.office365.com:587
popserver=Outlook.office365.com:995
client_id=xxxxx
client_secret=xxxx
token_uri=https://login.microsoftonline.com/xxxxx/oauth2/v2.0/token

[office365-OLD]
server=TLS Smtp.office365.com:587
popserver=Outlook.office365.com:995
client_id=xxxxx
client_secret=xxxx
token_uri=https://login.microsoftonline.com/xxxxx/oauth2/v2.0/token
refresh_token=xxxxx
----------------------------------------


■ Entraアプリケーションの登録[クライアントID],[オブジェクトID],[クライアントシークレット],[テナントID](ブラウザ)

[クライアントID]と[クライアントシークレット]は、ブラウザを使って取得します。
Microsoft Entra 管理センター(https://entra.microsoft.com/#home)にログインして、アプリケーション登録します。

1. アプリケーションの登録
任意の名前でかまいません。
リダイレクトURLも任意な存在しないURLで構いません。http://localhost/myapp/。




2. クライアントIDとテナントID、オブジェクトID、テナントIDをコピー




3. クライアントシークレット作成&コピー
[証明書またはシークレットの追加]をクリック。




[新しいクライアントシークレット]をクリック。







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




4. APIのアクセス許可の追加
[APIのアクセス許可]-[アクセス許可の追加]をクリック。
Microsoft Graph User.Read は、デフォルトで追加されるようです。 この項目は、そのままで構いません。




[所属する組織で使用しているAPI]-[Office 365 Excange Online]をクリック。




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

IMAP4 で受信する場合は、以下も追加します。IMAP4 のみで受信する場合は、POP.AccessAsApp は不要です。

APIアクセス許可の要求項目の選択方法は、[アクセス許可を選択する]テキストボックスに、
POP でエンターキー、
  POP.AccessAsApp
を選択。

次にSMTP を入力して
  SMTP.SendAsApp
を選択します。

IMAP4 で受信する場合は、IMAP を入力して
  IMAP.AccessAsApp
を選択します。
種類が「アプリケーション」であることを確認してください。
(Microsoft Graph の IMAP.AccessAsUser.All は委任用で、この方式では使いません)



次に組織に管理者の同意を与えます。







状態の文字がグリーンになっているか確認します。


注意:アクセス許可を追加する前に取得したアクセストークンには、追加した権限が含まれません。
POP3 で使っていた環境に IMAP.AccessAsApp を追加した場合は、一時フォルダ(%TEMP%)にある
キャッシュファイル「Outlook.office365.com-メールアドレス-クライアントID.txt」を削除してください。
(oauth2_opt=token=nocache を指定している場合は不要です)
Test-MsImapConnection で確認する場合は、PowerShell を新しいウィンドウで起動し直してください。


■ アプリケーションのサービス プリンシパル登録(PowerShell)

Entraアプリケーションのサービス プリンシパル登録は、PowerShell管理者モードを使って実行します。
ブラウザでサインインを求められたら、 Entra管理者でサインインする必要があります。
参考: Exchange Online PowerShell に接続する
PowerShellコマンド内で、以下のIDやメールアドレスを使います。

・テナントID
・EntraアプリケーションID(クライアントID)
・EntraアプリケーションオブジェクトID  ....エンタープライズアプリケーションの概要画面からコピペしてください。
・BASP21 Proで使うメールアドレス

(1)PowerShellを管理者で起動

(2)モジュールをインストール (初回のみ)
PS > Install-Module -Name ExchangeOnlineManagement

続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet
プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または
'C:\Users\CSJW10-08\AppData\Local\PackageManagement\ProviderAssemblies'
に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet
プロバイダーをインストールすることもできます。今すぐ PowerShellGet で NuGet
プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y

信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSReposit
ory コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery'
からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
PS >

(3)モジュールをロード  (初回のみ)
PS > Import-module ExchangeOnlineManagement

(4)テナントに接続  テナントIDを指定

PS > Connect-ExchangeOnline -Organization テナントID

ブラウザが開くので管理者でログインしてください。

----------------------------------------------------------------------------------------
This V3 EXO PowerShell module contains new REST API backed Exchange Online cmdlets which doesn't require WinRM for Client-Server communication. You can now run these cmdlets after turning off WinRM Basic Auth in your client machine thus making it more secure.

Unlike the EXO* prefixed cmdlets, the cmdlets in this module support full functional parity with the RPS (V1) cmdlets.

V3 cmdlets in the downloaded module are resilient to transient failures, handling retries and throttling errors inherently.

REST backed EOP and SCC cmdlets are also available in the V3 module. Similar to EXO, the cmdlets can be run without WinRM basic auth enabled.

For more information check https://aka.ms/exov3-module
----------------------------------------------------------------------------------------


(5)Entra アプリケーションのサービス プリンシパルの登録
EntraアプリのアプリケーションIDとオブジェクトIDを指定。

PS > New-ServicePrincipal -AppId アプリケーションID -ObjectId アプリケーションオブジェクトID


注意:ここで以下のエラーが発生することがあります。
エラー: AADServicePrincipalNotFound。クライアント アプリケーション ID 'xxxxxxxxxxx' のオブジェクト ID 'xxxxxx'の ServicePrincipal は、
このテナントに登録されていません。
このエラーの回避策ですが、 オブジェクトIDが誤っていますので、 Entraアプリケーションの管理画面から、 エンタープライズアプリケーションの概要画面からコピペしてください。
以下のように[アプリ登録]-[概要]からコピペすると違うオブジェクトIDとなります。
(6)アプリケーションのサービス プリンシパルに 1 つのメールボックスへのアクセス権を付与。 PS > Add-MailboxPermission -Identity メールアドレス -User アプリケーションオブジェクトID -AccessRights FullAccess (7)アプリケーションのサービス プリンシパルに SendAs (メールボックス所有者として送信する) 権限の付与。 PS > Add-RecipientPermission -Identity メールアドレス -Trustee アプリケーションオブジェクトID -AccessRights SendAs (8)IMAP4 で受信する場合は、メールボックスの IMAP が有効か確認。 無効の場合は認証が成功しても接続できません。 PS > Get-CASMailbox メールアドレス | Format-List ImapEnabled ImapEnabled : True False の場合は有効にします。 PS > Set-CASMailbox メールアドレス -ImapEnabled $true (9)テナント切断 PS > Disconnect-ExchangeOnline

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

VBScriptスクリプトを実行して、アクセストークンテストを実行します。

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

使用するscope は、以下の通りです。
POP・SMTP・IMAP共通 ..... https://outlook.office365.com/.default

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


office365-oauth2-2025.vbs ファイルの内容。
''==============================================
DATEX = Replace(Date(),"/","")
ENTRAAPP="●●" '.... Entra アプリケーション名 コメントとして使うので任意な名前で構いません
CID="●●"  '... クライアントID
CSS="●●"  '... クライアントシークレット
TID="●●"  '... テナントID
'' ログファイル
LOGFILE="C:\●●\#EAP#-vbslog#DATE#.txt"
LOGFILE=Replace(LOGFILE,"#EAP#",ENTRAAPP)
LOGFILE=Replace(LOGFILE,"#DATE#",DATEX)
'  
'' curl トレースファイル
CURLTRACE="--trace-ascii C:\●●\#EAP#-curllog#DATE#.txt"
CURLTRACE=Replace(CURLTRACE,"#EAP#",ENTRAAPP)
CURLTRACE=Replace(CURLTRACE,"#DATE#",DATEX)
'==============================================

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


以下のようにアクセストークンとbasp21p.ini設定項目がログファイル(LOGFILE)に書込みがあればOK。

-------------- basp21p.ini -------------
access_token=.................

[office365-20250104]
# 2025/01/04 Office365 OAuth2 BTEST-06
allow=all
server=TLS Smtp.office365.com:587
popserver=Outlook.office365.com:995
client_id=xxxxx
client_secret=xxxx
token_uri=https://login.microsoftonline.com/xxxxx/oauth2/v2.0/token
----------------------------------------
この basp21p.iniの設定項目をbasp21p.ini ファイルにコピペします。
従来の方式の basp21p.ini 設定のリフレッシュトークン項目(refresh_token=)は、もう必要ありません。

refresh_token=項目があると、リフレッシュトークンを使ってアクセストークンを取得する従来の処理が実行されます。
これは、互換性維持のためで、バージョン1,0,2501,4以降でもリフレッシュトークンを使った旧方式をサポートします。

■ 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
メール送信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
sslver=13
logfile=c:\wk\office365-log.txt
popserver=outlook.office365.com:995
client_id=クライアントID1
client_secret=クライアントシークレット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")
If isarray(ar) Then
  msg= "done: メール数:" & replace(ar(0)," ","   バイト数:")
Else
  msg = bobj.lastmsg
End If
wscript.echo msg
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
   [接続が続きます...]


■ RcvMail IMAP4 受信サンプル(VBScript)

RcvMailメソッドは IMAP4 で受信できます。popserver パラメータ(PopServerプロパティ)にポート番号 993 を指定すると IMAP4 で受信します。
認証方式は POP3 と同じクライアント資格情報付与フローです。アプリケーションコードは RcvMailメソッドのままで、追加のメソッドはありません。
アクセストークンのキャッシュファイルも POP3 と共通です。

POP3 と IMAP4 の設定の違いは以下のとおりです。
項目POP3IMAP4
APIのアクセス許可POP.AccessAsAppIMAP.AccessAsApp
サービス プリンシパル登録New-ServicePrincipal
Add-MailboxPermission
同左。POP3 で登録済みなら追加作業は不要
メールボックスの設定PopEnabledImapEnabled
scopehttps://outlook.office365.com/.default同左
popserveroutlook.office365.com:995outlook.office365.com:993
(143 を指定すると STARTTLS)
RcvMail のパスワードXOAUTH2XOAUTH2

basp21p.iniファイルの設定例です。popserver のポート番号を 993 にします。
[office365-imap]
allow=all
logfile=c:\wk\office365-imap-log.txt
popserver=outlook.office365.com:993
client_id=クライアントID1
client_secret=クライアントシークレット1
token_uri=https://login.microsoftonline.com/..../oauth2/v2.0/token
imapoption=imapfolder=INBOX,imapmaxhits=500
メール受信vbscriptサンプルは以下のようになります。
'' office365imap.vbs
Set bobj = CreateObject("basp21pro")
bobj.Env="office365-imap"
user = "xxx@xxxx.co.jp"

'' メール数と総バイト数
ar = bobj.RcvMail(user,"XOAUTH2","STAT")
If isarray(ar) Then
  msg= "done: メール数:" & replace(ar(0)," ","   バイト数:")
Else
  msg = bobj.lastmsg
End If
wscript.echo msg

'' 新着メールを受信(受信済みのファイルはスキップ)
files = bobj.RcvMail(user,"XOAUTH2","SAVENEW","c:\mail\inbox")

'' サーバ側で検索して該当メールだけ受信
'' 10/1 以降の未読で、件名に「請求書」を含むメール
files = bobj.RcvMail(user,"XOAUTH2", _
        "SAVESEARCH UNSEEN SINCE 2026/10/01 SUBJECT ""請求書""","c:\mail\seikyu")
If isarray(files) Then
  For Each f In files
    arr = bobj.ReadMail(f,"subject:from:date:")
  Next
End If

'' 未読メール数のみ
ar = bobj.RcvMail(user,"XOAUTH2","COUNT UNSEEN")
wscript.echo "未読 " & ar(0) & " 件"
IMAP4プロトコルのコマンドシーケンスは、以下のようになります(STAT の例)。
S: * OK Microsoft Exchange IMAP4 service ready. ....
C: B0001 AUTHENTICATE XOAUTH2 dXNlcj10Y.....................
S: B0001 OK AUTHENTICATE completed.
C: B0002 CAPABILITY
S: B0002 OK CAPABILITY completed.
C: B0003 EXAMINE "INBOX"
S: B0003 OK [READ-ONLY] EXAMINE completed.
C: B0004 FETCH 1:* (UID INTERNALDATE RFC822.SIZE)
S: B0004 OK FETCH completed.
C: B0005 LOGOUT
S: B0005 OK LOGOUT completed.
IMAP4 で使える RcvMail コマンド
POP3 と同じコマンドに加えて、サーバ側で検索するコマンドが使えます。
コマンド説明戻り値の配列
STATメール数と総バイト数"件数 総バイト数"
LIST [n[-n2]]Subject、From、Date ヘッダーPOP3 と同じ形式の後ろにタブ区切りで "UID: UIDVALIDITY-UID"
SAVE / SAVD n[-n2]受信(SAVD は受信後に削除)ファイル名
SAVEALL / SAVEALLD全メールを受信(D は受信後に削除)ファイル名
SAVENEW / SAVENEWD受信済みファイルがないメールを受信(D は受信後に削除)ファイル名
DELE n[-n2]削除削除件数
DELU ファイル名,...受信したファイル名のメールをサーバから削除削除件数
SEARCH 検索条件サーバ側で検索LIST と同じ形式
COUNT 検索条件サーバ側で検索して件数のみ返す件数
SAVESEARCH / SAVESEARCHD 検索条件サーバ側で検索して受信(D は受信後に削除)ファイル名
FOLDERSフォルダ一覧フォルダ名

受信したメールファイル名は次の形式です。
  受信日時_imap_UIDVALIDITY-UID     例:20261016091530_imap_14-4521
UID はフォルダごとの番号です。フォルダごとに保存ディレクトリ(dirname)を分けてください。
参照のみのコマンドでは、フォルダを読み取り専用で開くため、受信しても既読になりません。
メールファイルの形式は POP3 と同じです。ReadMailメソッドとSortMailメソッドがそのまま使えます。

Exchange Online の受信トレイのフォルダ名は "INBOX" です。
サブフォルダは "INBOX/請求書" のように "/" で区切って指定します。
フォルダ名は FOLDERS コマンドで確認できます。

Exchange Online は日本語(UTF-8)の検索に対応していません。
日本語を含む SUBJECT/FROM/TO/CC/BCC/HEADER の条件は、BASP21 Pro が自動的に
クライアント側で判定します(日本語以外の条件でサーバ側検索 → ヘッダを取得して部分一致で絞込み)。
この場合、日本語の条件は OR/NOT の中には指定できません。
件数が多いと時間がかかるため、SINCE などで対象を絞り込んで使ってください。
  例:SAVESEARCH SINCE 2026/10/01 SUBJECT "請求書"
英数字の条件は、サーバ側で検索します。
受信フォルダや受信件数の上限などは、imapoptionパラメータで指定します。 詳細は、imapoptionパラメータと RcvMailメソッドを参照してください。

■ Test-MsPopConnectionを使ったPop接続テスト(PowerShell)

Entraアプリケーションの構成が正しいかどうか以下のコマンドレットでチェックできます。


(1)PowerShellを管理者権限で起動

(2)Mail.Protocolsをインストール (初回のみ)
PS > Install-Module Mail.Protocols

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。
このリポジトリを信頼する場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy
 の値を変更してください。'PSGallery' からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y

(3)Test-MsPopConnection実行
PS > Test-MsPopConnection
Please input log file path. If empty, it applies the default path of the app. Typically under \logs of current directory.: ログファイルフルパス
Please input the Azure Cloud Instance of interest. (1. AzurePublic, 2. AzureChina, 3. AzureUsGovernment.): 1
Please input the mailbox to connect.: メールアドレス
Please input the authentication type. (1. OAuth, 2. Basic Auth **has deprecated in most tenants**.): 1
Do you want to access the mailbox as user delegation (login window will prompt for authentication)
        or as app (a secret will be needed for authenticaiton)? (1. User delegation, 2. App.): 2
Please input your tenant Id. Input empty string if your app is registered as a multiple-tenant app.: テナントID
Please input your client Id (aka application id).: クライアントID
Please input the secret of the registered app.: クライアントシークレット
  C Connecting to server 'outlook.office365.com' on port 995.
  S +OK The Microsoft Exchange POP3 service is ready. [VABZA...]
  C AUTH XOAUTH2
  S +
  C xxxxxxxxxxxxxxxxxxxxxx
  S +OK User successfully authenticated.
  C LIST
  S +OK 480 62669336
  S 1 35884
  S 2 119995

エラーの場合は、以下のようになります。
  S -ERR Authentication failure: unknown user name or bad password.
It is not a valid AccessToken. A valid AccessToken must have either a roles or scp claim.
  C Connection is closed.
警告: Something is wrong. Please review the log 指定したログファイルフルパス
PS >

認証コードフロー方式は、Test-MsPopConnectionは、失敗するようです。


エラーの場合、チェック項目は、以下のとおりです。

(1)アプリケーションID、やクライアントID、オブジェクトIDの確認

(2)サービス プリンシパル登録の確認
・ExchangeOnlineに接続
PS > Connect-ExchangeOnline -Organization <テナントID>

・Entra アプリケーションのサービス プリンシパル登録の確認
PS > Get-ServicePrincipal | fl

・アプリケーションのサービス プリンシパルのメールボックスへのアクセス権確認
PS > Get-MailboxPermission -Identity メールアドレス | FL
PS > Get-RecipientPermission -Identity メールアドレス | FL

(3)EntraアプリケーションAPI許可に管理者の同意があるか確認



■ Test-MsImapConnectionを使ったIMAP接続テスト(PowerShell)

IMAP4 で認証エラーとなる場合は、Test-MsPopConnection と同じ Mail.Protocols モジュールの Test-MsImapConnection で確認できます。入力項目は Test-MsPopConnection と同じです。

PS > Test-MsImapConnection
  (入力項目は Test-MsPopConnection と同じ)
  C Connecting to server 'outlook.office365.com' on port 993.
  S * OK Microsoft Exchange IMAP4 service ready. ....
  C 0001 AUTHENTICATE XOAUTH2 xxxxxxxxxxxxxxxxxxxxxx
  S 0001 OK AUTHENTICATE completed.
  C 0002 LIST "" *
  S * LIST (\HasNoChildren) "/" INBOX
     ....
  S 0002 OK LIST completed.
IMAP connection is successful for mailbox 'メールアドレス' on server 'outlook.office365.com' and port 993.

IMAP.AccessAsApp のアクセス許可がない場合は、以下のエラーになります。
  S 0001 NO AUTHENTICATE failed.
The AccessToken's roles are 'POP.AccessAsApp,SMTP.SendAsApp', which doesn't have the required scope 'IMAP.AccessAsApp'.

アクセス許可を追加した直後は、PowerShell が取得済みのアクセストークンを使い続けるため、
同じエラーになることがあります。PowerShell を新しいウィンドウで起動し直してください。

エラーの場合、Test-MsPopConnection のチェック項目に加えて以下を確認してください。

(1)EntraアプリケーションAPI許可に IMAP.AccessAsApp があり、管理者の同意があるか確認
(2)メールボックスの IMAP が有効か確認
PS > Get-CASMailbox メールアドレス | Format-List ImapEnabled
(3)BASP21 Pro でエラーとなる場合は、一時フォルダ(%TEMP%)のアクセストークンキャッシュファイルを削除

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

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