本文へスキップ

Outlook IMAP OAuth2 接続方法|パスワードで繋がらない時の対処

Outlook のメールボックスに OAuth2 のアクセストークンで IMAP 接続する流れを示した図

メールソフトや自作のスクリプトから Outlook.com(@outlook.com・@hotmail.com など)に IMAP で接続しようとして、パスワードは合っているのに「AUTHENTICATE failed」と返される。設定を何度見直しても変わらない、というのがこの症状の典型です。

原因の多くは、Outlook.com がパスワードによる「基本認証」を受け付けなくなり、OAuth2 の「先進認証」での接続が必要になったことです。設定を一つずつ確認していけば、接続自体はそれほど難しくありません。

この記事でわかること

  • パスワードで IMAP 接続できなくなった理由
  • OAuth2 で接続するときのサーバー・ポート・スコープ
  • XOAUTH2 の認証文字列の作り方と Python での接続例
  • よく出るエラーの意味と対処

パスワードで IMAP 接続できなくなった理由

Microsoft は、ユーザー名とパスワードをそのまま送る「基本認証」の受け付けを段階的に終了してきました。法人向けの Exchange Online では先行して無効化が進み、個人向けの Outlook.com でも、サードパーティのアプリから IMAP・POP・SMTP で接続する際には OAuth2 による認証が求められるようになっています。

基本認証では、パスワードがアプリやサーバーにそのまま保存されます。漏えいすればアカウントそのものを乗っ取られかねません。OAuth2 では、アプリが受け取るのは「この用途で、この期間だけ使える鍵(アクセストークン)」です。パスワード自体はアプリ側に渡らないため、万一トークンが漏れても被害の範囲と期間を限定できます。

つまり「パスワードが間違っている」のではなく、「パスワードという方式が使えなくなった」というのが正しい理解です。アプリ パスワードで回避できたケースもありましたが、今後を考えると OAuth2 に切り替えておくのが確実です。

接続に必要な情報(サーバー・ポート・スコープ)

Outlook.com の個人アカウントで使う主な設定は次のとおりです。2026年10月時点で Microsoft の公式サポートに掲載されている値をもとにしています。

項目設定値
IMAP サーバーoutlook.office365.com(ポート 993・SSL/TLS)
POP サーバーoutlook.office365.com(ポート 995・SSL/TLS)
SMTP サーバーsmtp-mail.outlook.com(ポート 587・STARTTLS)
認証方式OAuth2(SASL の XOAUTH2 メカニズム)
IMAP 用スコープhttps://outlook.office.com/IMAP.AccessAsUser.All
POP / SMTP 用スコープhttps://outlook.office.com/POP.AccessAsUser.All / https://outlook.office.com/SMTP.Send
トークンエンドポイントhttps://login.microsoftonline.com/consumers/oauth2/v2.0/token

長期間使うなら、スコープに offline_access を加えます。こうするとリフレッシュトークンが発行され、ユーザーが毎回ログインし直さなくてもアクセストークンを更新できます。リフレッシュトークンと client_id の関係は、Outlook の refresh_token と client_id とはで詳しくまとめています。

アプリがトークンエンドポイントからアクセストークンを受け取り、IMAP サーバーに XOAUTH2 でログインするまでの流れ
OAuth2 で IMAP 接続するまでの流れ。パスワードは IMAP サーバーに送られません。

アクセストークンを取得するまでの流れ

自分でプログラムを書く場合、トークンを取得するまでの手順は大きく分けて次の4段階です。

  1. アプリを登録する:Microsoft Entra 管理センター(Azure ポータル)の「アプリの登録」で新しいアプリを作り、サポートするアカウントの種類に「個人用 Microsoft アカウント」を含めます。表示される「アプリケーション (クライアント) ID」が client_id です。
  2. パブリック クライアントを許可する:デスクトップアプリやスクリプトで使う場合は、「認証」画面でパブリック クライアント フローを有効にします。デバイスコードフローを使うときに必要です。
  3. ユーザーに同意してもらう:初回だけブラウザでサインインし、IMAP へのアクセスを許可します。このとき要求したスコープが、後で使えるスコープの上限になります。
  4. トークンを保存・更新する:受け取ったアクセストークンは約1時間で期限が切れます。リフレッシュトークンを使って新しいアクセストークンを取得し、接続のたびに使います。

既存のメールソフトを使う場合は、この手順をソフトが代行してくれます。自分で用意する必要があるのは、主にスクリプトや業務システムから接続するケースです。

XOAUTH2 で IMAP にログインする

IMAP サーバーへは、取得したアクセストークンを XOAUTH2 という形式の文字列にして渡します。文字列の構造は次のとおりで、\x01 は制御文字(SOH)を表します。

user=メールアドレス\x01auth=Bearer アクセストークン\x01\x01

この文字列を Base64 エンコードしたものを、AUTHENTICATE XOAUTH2 コマンドで送ります。Python 標準の imaplib はエンコードを自動で行うので、元の文字列を返す関数を渡すだけで済みます。

import imaplib

def imap_login(email: str, access_token: str) -> imaplib.IMAP4_SSL:
    auth = f"user={email}\x01auth=Bearer {access_token}\x01\x01"
    imap = imaplib.IMAP4_SSL("outlook.office365.com", 993)
    imap.authenticate("XOAUTH2", lambda _: auth.encode())
    return imap

imap = imap_login("you@outlook.com", access_token)
imap.select("INBOX", readonly=True)
status, data = imap.search(None, "UNSEEN")
print(status, data)
imap.logout()

user= に入れるアドレスは、トークンを発行したアカウントと一致している必要があります。エイリアス(別名アドレス)で失敗する場合は、メインのアドレスで試してみてください。

XOAUTH2 認証文字列が user、auth=Bearer トークン、区切り文字で構成され、Base64 で送られることを示す図
XOAUTH2 の認証文字列の構造。区切りには制御文字 \x01 を使います。

メールソフトで使う場合

Thunderbird など、Microsoft の OAuth2 に対応したメールソフトであれば、手動でトークンを用意する必要はありません。アカウント追加の画面で認証方式に「OAuth2」を選ぶと、ブラウザ風のサインイン画面が開きます。そこでサインインして許可すれば、以降はソフトが自動でトークンを更新します。

うまくいかない場合は、次の点を確認してください。

  • サーバー名・ポート・暗号化方式が上の表と一致しているか
  • 認証方式が「通常のパスワード」のままになっていないか
  • 以前に保存したパスワードが残っていて、そちらが優先されていないか
  • Outlook.com 側の設定で、POP を使う場合に「POP を使用するデバイスとアプリを許可」がオンになっているか

OAuth2 に対応していない古いソフトは、今後も接続できない可能性が高いと考えてください。IMAP と POP のどちらを選ぶべきか迷ったら、IMAP と POP3 の違いも参考になります。

よくあるエラーと対処

エラー主な原因対処
AUTHENTICATE failed.トークンの期限切れ、スコープ不足、user とトークンのアカウント不一致IMAP 用スコープでトークンを取り直し、アドレスを確認する
invalid_grantリフレッシュトークンの失効、別の client_id での更新発行時と同じ client_id で更新する。失効していれば再同意
AADSTS50173パスワード変更などでトークンが取り消されたサインインし直して新しいトークンを取得
AADSTS65001必要なスコープに同意していない同意画面を出してスコープを許可し直す
AADSTS700016client_id が存在しない、またはテナント指定が合っていないアプリ ID と、個人アカウント対応の設定を確認

アクセストークンやリフレッシュトークンは、パスワードと同じくらい重要な情報です。ソースコードに直接書かず、環境変数やシークレット管理の仕組みで保管してください。ログに出力しないことも大切です。

詳しい仕様は、Microsoft の公式ドキュメント「OAuth を使用して IMAP、POP、SMTP 接続を認証する」にも掲載されています。

よくある質問

アプリ パスワードを使えば、今までどおり接続できますか?

一時的に使えることもありますが、Microsoft は基本認証そのものを終了する方針です。長く使う仕組みなら、OAuth2 に移行しておくほうが安全で確実です。

アクセストークンはどれくらいの期間使えますか?

おおむね1時間前後です。期限が切れたらリフレッシュトークンで新しいアクセストークンを取得します。接続のたびに有効期限を確認し、必要なときだけ更新する作りにすると効率的です。

Graph API だけ許可されたトークンで IMAP に接続できますか?

できません。IMAP 接続には IMAP 用のスコープが必要です。Graph の Mail.Read だけが許可されている場合は、Microsoft Graph API でメールを取得する方法のように Graph 経由で読み取ります。

SMTP でメールを送るにも OAuth2 が必要ですか?

はい。送信にも SMTP.Send スコープのトークンを使い、STARTTLS で暗号化してから XOAUTH2 で認証します。

まとめ

  • Outlook.com の IMAP は、パスワードではなく OAuth2 で接続する
  • サーバーは outlook.office365.com:993、スコープは IMAP.AccessAsUser.All
  • XOAUTH2 の文字列は「user=アドレス」「auth=Bearer トークン」を \x01 で区切る
  • エラーの多くはスコープ不足・期限切れ・client_id の不一致が原因

OAuth2 での接続に対応した Outlook・Hotmail アカウントは、Hotmail・Outlook(OAuth2対応)のカテゴリでも取り扱っています。

KeyCenter編集部

デジタルアカウントの安全な使い方や設定手順を、実際の画面の流れにそってまとめています。内容は公開時点の情報です。各サービスの最新の仕様は公式ヘルプもあわせてご確認ください。

関連する商品

一覧を見る

あわせて読みたい

記事一覧