Guide

Outlook SMTP 设置:服务器、端口与 TLS

面向开发者的完整 Outlook SMTP 参考:smtp.office365.com 服务器设置、端口 587 与 STARTTLS、Microsoft 自 2022 年 10 月移除 Basic Auth 后的 Modern Auth(OAuth 2.0)要求、Microsoft 365 和 Outlook.com 的发送限制、常见 SMTP 错误代码,以及一个零配置替代方案。

Written by Nick Barraclough Product Manager

VerifiedCLI 3.1.11 · Outlook · last tested May 23, 2026

本指南用到的命令参考: nylas email send 用于无需 SMTP 发送邮件、 nylas auth login 用于 OAuth 认证、 nylas email list 用于读取邮件。

Outlook SMTP 服务器设置是什么?

Outlook 的 SMTP 服务器是 smtp.office365.com。端口 587 加 STARTTLS 是唯一受支持的配置——Microsoft 已弃用端口 25 的客户端提交,并且对于 Exchange Online,推荐使用端口 587 加 STARTTLS 而非端口 465。认证必须使用 OAuth 2.0 Modern Auth。下表是配置任何 SMTP 客户端或库时完整的 Outlook 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 停用 Basic Auth 如何改变了 SMTP 访问?

Microsoft 于 2022 年 10 月 1 日永久禁用了 Exchange Online 各协议的 Basic Authentication。在此之前,SMTP 客户端可以以明文方式发送用户名和密码(通过 AUTH LOGIN 或 AUTH PLAIN 进行 base64 编码)。停用之后,所有 SMTP 连接都必须通过 XOAUTH2 SASL 机制使用 OAuth 2.0 访问令牌进行认证。这一变化一夜之间让数以千计的脚本、打印机和业务应用停止工作。

要通过 SMTP 以 Modern Auth 发送邮件,你需要一个具有 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 系列覆盖认证和授权失败,是 Basic Auth 停用之后最常见的错误类型。下表列出了 Microsoft NDR 参考文档中的 8 个常见错误。

错误代码含义修复方法
535 5.7.3认证失败改用 OAuth 2.0 Modern Auth;Basic 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 以下(35 MB 含 base64 开销 = 约 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 商业版计划与免费的 Outlook.com 账户限制不同。超出任一限制都会触发 421 4.7.0 限流响应或 550 拒绝。下表展示了 Microsoft Exchange Online 限制文档中的当前限制。

限制项Microsoft 365Outlook.com
每天收件人数10,000因订阅而异
每封邮件收件人数最多 1,000(管理员可配置)100
每分钟消息数3030
最大消息体积25 MB25 MB
最大附件数250250

每分钟 30 条消息的限制经常让构建自动化通知系统的开发者措手不及。它是按邮箱而非按租户计算的上限,因此把发送分散到多个邮箱可以绕开它。对于大批量事务性邮件,Microsoft 推荐使用 Azure Communication Services 资源或第三方 ESP,而不是 SMTP AUTH。

什么时候应该完全跳过 Outlook SMTP?

通过 smtp.office365.com 走 SMTP AUTH 需要 Azure AD 应用注册、OAuth 2.0 令牌管理、XOAUTH2 编码,以及管理员为每个邮箱单独启用。如果你在构建从 Outlook 账户发送邮件的脚本、CI/CD 流水线或开发者工具,这些步骤可以全部跳过。CLI 通过浏览器完成 OAuth 认证、缓存令牌,并自动处理刷新。

下面的示例用 2 条命令从 Outlook 账户发出一封邮件。第一条完成认证并将凭据存储在本地,第二条通过 HTTPS(而非 SMTP)发送消息。没有端口 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 停用 Basic Auth 所带来的认证复杂性。

后续步骤