Guide
Outlook SMTP設定:サーバー・ポート・TLS
開発者向けの Outlook SMTP 完全リファレンス:smtp.office365.com の設定、ポート 587 + STARTTLS、Microsoft が 2022 年 10 月に基本認証を廃止して以降の Modern Auth(OAuth 2.0)要件、Microsoft 365 と Outlook.com の送信制限、よくある SMTP エラーコード、そして設定不要の代替手段を解説します。
Written by Nick Barraclough Product Manager
このガイドで使用するコマンドリファレンス: SMTP なしで送信する nylas email send、 OAuth 認証を行う nylas auth login、 メールを閲覧する nylas email list。
Outlook SMTP設定の内容は?
Outlook の SMTP サーバーは smtp.office365.com です。Microsoft はクライアント送信用のポート 25 を非推奨とし、Exchange Online ではポート 465 よりもポート 587 + STARTTLS を推奨しているため、サポートされる構成はポート 587 + STARTTLS のみです。認証には OAuth 2.0 の Modern Auth が必須です。以下の表は、任意の SMTP クライアントやライブラリを設定するためのクイックリファレンスです。
| 設定項目 | 値 |
|---|---|
| SMTP サーバー | smtp.office365.com |
| ポート | 587 |
| 暗号化 | STARTTLS(必須) |
| 認証 | OAuth 2.0(Modern Auth) |
| ユーザー名 | メールアドレス全体(user@domain.com) |
| IMAP サーバー | outlook.office365.com(ポート 993、TLS) |
| POP3 サーバー | outlook.office365.com(ポート 995、TLS) |
IMAP と POP3 のサーバーは、SMTP サーバーとは別のホスト名(outlook.office365.com)を使います。同じホスト名だと思い込んでいる開発者がよくつまずくポイントです。Microsoft の Exchange Online ドキュメントによると、SMTP AUTH はテナント管理者がメールボックスごとに明示的に有効化する必要があります。新規の Microsoft 365 テナントではデフォルトで無効です。
Microsoft の基本認証廃止は SMTP アクセスをどう変えたか?
Microsoft は 2022 年 10 月 1 日、Exchange Online の各プロトコルで基本認証を完全に無効化しました。それ以前は、SMTP クライアントはユーザー名とパスワードを平文(AUTH LOGIN または AUTH PLAIN による base64 エンコード)で送信できました。廃止後は、すべての SMTP 接続が XOAUTH2 SASL メカニズムを使った OAuth 2.0 アクセストークンでの認証を必須とします。この変更により、数千ものスクリプト、プリンター、業務アプリが一夜にして動作しなくなりました。
Modern Auth で SMTP 経由のメール送信を行うには、SMTP.Send 委任アクセス許可を持つ Azure AD アプリ登録が必要です。トークンリクエストは https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token に scope=https://outlook.office365.com/.default を付けて送信します。アクセストークンは 3,600 秒(1 時間)で期限切れになるため、本番コードにはリフレッシュトークンのループが必要です。以下の例は、STARTTLS へのアップグレード後の SMTP EHLO ハンドシェイクを示しています。
# SMTP Modern Auth ハンドシェイク(概念図)
EHLO client.example.com
STARTTLS
EHLO client.example.com
AUTH XOAUTH2 <base64-encoded-oauth2-token>
# base64 トークンの形式:
# user=user@contoso.com^Aauth=Bearer <access_token>^A^A
# ^A は ASCII の SOH 文字(0x01)XOAUTH2 のトークン形式は、標準的な Bearer ヘッダーと同じではありません。user= と auth=Bearer の各フィールドは SOH(0x01)文字で区切り、文字列全体を base64 エンコードします。このエンコードの誤りが 535 5.7.3 Authentication unsuccessful エラーの最大の原因です。Microsoft の XOAUTH2 ドキュメントには、この文字列を正しく構築する Python サンプルが掲載されています。
Outlook SMTP のよくあるエラーと対処法は?
Outlook SMTP は、RFC 5321 のエラーコードに Microsoft 固有の拡張ステータスコードを付けて返します。5.7.x 系は認証と認可の失敗を表し、基本認証廃止以降もっとも多く発生しています。以下の表は、Microsoft の NDR リファレンスからよくあるエラー 8 件をまとめたものです。
| エラーコード | 意味 | 対処法 |
|---|---|---|
| 535 5.7.3 | 認証に失敗 | OAuth 2.0 の Modern Auth に切り替える。基本認証は恒久的に無効 |
| 550 5.7.501 | メールボックスで SMTP AUTH が無効 | 管理者が Set-CASMailbox -SmtpClientAuthenticationDisabled $false で SMTP AUTH を有効化する |
| 550 5.1.1 | 受信者が見つからない | 受信者アドレスが対象ドメインに存在するか確認する |
| 421 4.7.0 | 接続がスロットリングされた | 60 秒待ってから再試行し、送信レートを下げる |
| 550 5.7.708 | テナントの送信メールがブロックされた | 管理者が Security & Compliance Center でブロックを解除する |
| 554 5.2.0 | メッセージサイズ超過 | メッセージを 25 MB 未満に抑える(base64 のオーバーヘッド込み 35 MB = デコード後約 25 MB) |
| 452 4.5.3 | 受信者数が多すぎる | テナントごとの受信者上限内に抑える(デフォルトは可変、最大 1,000) |
| 550 5.7.520 | スパムと判定された | SPF、DKIM、DMARC レコードを確認し、一括送信レートを下げる |
もっとも多いのは 535 5.7.3 エラーで、2022 年 10 月以降のサポートチケットの大半を占めています。このエラーが出る場合、コードがまだ平文のユーザー名とパスワードを送信しています。対処法は、Azure AD アプリを登録し、OAuth 2.0 トークンを取得して、前のセクションで説明した XOAUTH2 メカニズムを使うことです。
Microsoft 365 の送信制限は?
Microsoft 365 は、SMTP AUTH 送信に対してメールボックス単位とテナント単位のレート制限を適用しています。制限値は Microsoft 365 Business プランと無料の Outlook.com アカウントで異なります。いずれかの制限を超えると、421 4.7.0 のスロットル応答または 550 の拒否が返されます。以下の表は、Microsoft の Exchange Online 制限ドキュメントに基づく現在の制限値です。
| 制限 | Microsoft 365 | Outlook.com |
|---|---|---|
| 1 日あたりの受信者数 | 10,000 | サブスクリプションにより異なる |
| 1 通あたりの受信者数 | 最大 1,000(管理者が設定可能) | 100 |
| 1 分あたりのメッセージ数 | 30 | 30 |
| 最大メッセージサイズ | 25 MB | 25 MB |
| 最大添付ファイル数 | 250 | 250 |
自動通知システムを構築する開発者が驚くのが、1 分あたり 30 通の制限です。これはテナント単位ではなくメールボックス単位の上限なので、複数のメールボックスに送信を分散させれば回避できます。大量のトランザクションメールには、SMTP AUTH ではなく Azure Communication Services リソースまたはサードパーティの ESP を使うことを Microsoft は推奨しています。
Outlook SMTP をスキップすべきなのはどんな場合?
smtp.office365.com 経由の SMTP AUTH には、Azure AD アプリの登録、OAuth 2.0 トークン管理、XOAUTH2 エンコード、メールボックスごとの管理者による有効化が必要です。Outlook アカウントからメールを送信するスクリプト、CI/CD パイプライン、開発者ツールを作るなら、これらをすべて省略できます。CLI はブラウザーで OAuth 認証を行い、トークンをキャッシュし、更新を自動的に処理します。
以下の例は、2 つのコマンドで Outlook アカウントからメールを送信します。1 つ目で認証して認証情報をローカルに保存し、2 つ目で SMTP ではなく HTTPS 経由でメッセージを送信します。ポート 587 も、STARTTLS ハンドシェイクも、XOAUTH2 トークンのエンコードも、管理者による有効化ステップも不要です。
# インストール(macOS または Linux)
brew install nylas/nylas-cli/nylas
# Outlook アカウントを認証
nylas auth login --provider microsoft
# メールを送信
nylas email send \
--to recipient@example.com \
--subject "Quarterly report" \
--body "See the attached spreadsheet."
# 配信を確認するため最近のメールを一覧表示
nylas email list --limit 5同じコマンドが Gmail、Yahoo、iCloud、Exchange、IMAP の各アカウントでも動作します。生の SMTP が必須のレガシーシステム向けに Outlook の SMTP 設定が必要な場合は、このページ冒頭のクイックリファレンス表を使ってください。それ以外のケースでは、SMTP をスキップすることで、Microsoft の基本認証廃止が持ち込んだ認証の複雑さを取り除けます。
次のステップ
- PHP でメールを送信:mail()、PHPMailer、CLI — PHP でメールを送信する 3 つの方法
- Gmail SMTP設定 — このリファレンスの Gmail 版。ポート 587/465 とアプリパスワードの設定
- Outlook メールをターミナルから送信 — Graph API も SMTP も使わずに Outlook メールを送信
- PowerShell で Office 365 メール — PowerShell スクリプトで O365 メールを管理
- EWS から Graph への移行 — 2026 年 10 月の終了前に Exchange Web Services から移行
- 完全なコマンドリファレンス — すべてのフラグとサブコマンドのドキュメント