Guide

Gmail SMTP 设置 2026:端口、TLS 与认证

面向开发者的完整 Gmail SMTP 参考:smtp.gmail.com 服务器设置、端口 587 与 465 配置、应用专用密码创建、OAuth 2.0 要求、发送限制、常见错误代码,以及零配置的 CLI 替代方案。

Written by Qasim Muhammad Staff SRE

VerifiedCLI 3.1.1 · Gmail · last tested May 21, 2026

本指南用到的命令参考: nylas email send 用于无需 SMTP 发送邮件、 nylas auth login 用于 OAuth 认证、 nylas auth config 用于无头环境的 API 密钥配置,以及 nylas email search 用于查找邮件。

Gmail SMTP 服务器设置有哪些?

Gmail 的外发邮件服务器是 smtp.gmail.com。它在端口 587 上接受 STARTTLS 加密连接,在端口 465 上接受隐式 SSL/TLS 连接。两个端口都要求使用应用专用密码或 OAuth 2.0 访问令牌进行认证。标准 Gmail 账户无法使用端口 25 的明文连接。这些设置自 Google 将其标准化以来从未改变,但自 2022 年起,可用的认证方式已大幅收窄。

设置项
SMTP 服务器smtp.gmail.com
端口(STARTTLS)587
端口(SSL/TLS)465
加密要求 TLS 1.2 或更高版本
认证应用专用密码或 OAuth 2.0
用户名你的完整 Gmail 地址(you@gmail.com
每日限制(个人)500 封
每日限制(Workspace)2,000 封

Google 还为需要更高吞吐量的 Workspace 账户提供 SMTP 中继 smtp-relay.gmail.com。该中继支持每用户每天最多 10,000 个收件人,并允许用基于 IP 的认证替代用户凭据。根据 Google 的 Workspace 文档,该中继面向打印机、扫描仪以及从已知 IP 段发送邮件的内部应用。

最常见的配置是端口 587 加 STARTTLS。下面是在 msmtp 中的写法——msmtp 是一个轻量级 SMTP 客户端,许多开发者用它替代 sendmail。配置文件是 ~/.msmtprc,编写大约需要 2 分钟。

~/.msmtprc
# ~/.msmtprc — Gmail SMTP via msmtp
account        gmail
host           smtp.gmail.com
port           587
tls            on
tls_starttls   on
auth           on
user           you@gmail.com
password       abcd-efgh-ijkl-mnop
from           you@gmail.com
logfile        ~/.msmtp.log

account default : gmail

如何为 SMTP 创建 Gmail 应用专用密码?

Gmail 应用专用密码是一个 16 位代码,在连接 SMTP 时代替你的账户密码。开启两步验证后,Google 会为你生成它。应用专用密码目前是个人 Gmail 账户唯一基于密码的 SMTP 认证方式。Google 于 2024 年 9 月 30 日开始停用"安全性较低的应用"(Less Secure Apps)访问,在同年 10 月暂停推进后,于 2025 年 5 月 1 日彻底完成关闭——从此无法再用普通 Gmail 密码建立 SMTP 连接。

创建应用专用密码大约需要 3 分钟。前提是已开启两步验证——自 2021 年起,Google 要求所有新账户开启。步骤如下:

  1. 前往 myaccount.google.com/security ,确认两步验证已开启。
  2. 访问 myaccount.google.com/apppasswords
  3. 为应用输入一个名称(例如 "SMTP script"),然后点击创建
  4. 复制这个 16 位密码。它只显示一次——之后无法再次查看。
  5. 在客户端中将它用作 SMTP 密码。用户名是你的完整邮箱地址。

根据 Google 的应用专用密码文档,应用专用密码 "aren't recommended and are unnecessary in most cases"(不推荐使用,多数情况下也无必要)。Google 更推荐 OAuth 2.0 登录。此外,每当你修改 Google 账户密码,应用专用密码都会被自动吊销,使用它的任何 SMTP 集成都会随之失效,直到你生成新的代码。

你可以用 swaks(SMTP 协议测试工具)来测试应用专用密码。它通过 Gmail 的 SMTP 服务器发送一封邮件,并展示 SMTP 握手的每一步,便于定位认证失败的位置。测试大约耗时 5 秒。

Terminal
# Test Gmail SMTP auth with swaks
swaks --to recipient@example.com \
  --from you@gmail.com \
  --server smtp.gmail.com \
  --port 587 \
  --tls \
  --auth LOGIN \
  --auth-user you@gmail.com \
  --auth-password "abcd-efgh-ijkl-mnop"

# Expected output (successful):
# -> AUTH LOGIN
# <- 235 2.7.0 Accepted
# -> MAIL FROM:<you@gmail.com>
# <- 250 2.1.0 OK

Gmail SMTP 发送限制是多少?

个人 Gmail 账户在滚动的 24 小时窗口内可发送 500 封邮件。Google Workspace 账户每天可发送 2,000 封。超出限制后,Gmail 会返回临时错误,并暂停外发邮件最长 24 小时。暂停期间收件不受影响。试用版 Workspace 账户在累计付款达到 100 美元之前,每天上限为 500 封。

限制个人 GmailGoogle Workspace
每日邮件数5002,000
单封邮件收件人数5002,000(外部 500)
每日收件人数50010,000
每日唯一外部收件人5003,000
每日邮件合并不适用1,500
SMTP 单封邮件收件人数100100
附件大小限制25 MB25 MB

SMTP 连接的单封邮件 100 个收件人上限,低于 Gmail 网页端允许的 500 个。根据 Google 的 Workspace 发送限制文档,无论账户类型如何,SMTP、POP 和 IMAP 用户的单封邮件收件人上限都是 100。如果脚本要发送给超过 100 个地址,请把收件人拆分成多个批次。

对于每天向 Gmail 收件人发送超过 5,000 封邮件的批量发送方,Google 要求发送域名配置 SPF、DKIM 和 DMARC 认证,并带有一键退订标头。这些要求于 2024 年 2 月生效。超出配额的发送方会看到 SMTP 错误代码 4.7.28——这是一个临时拒绝,会在 24 小时窗口重置后解除。

Gmail SMTP 认证为什么失败?

Gmail SMTP 认证失败有 4 个常见原因:缺少应用专用密码、凭据错误、未开启两步验证,或同时建立的连接过多。Google 会针对每种情况返回特定的 SMTP 错误代码。只要知道怎么看,错误消息就能准确告诉你问题所在。下面是最常遇到的代码。

错误代码消息原因解决方法
534-5.7.9"Application-specific password required"账户已开启两步验证但没有应用专用密码前往 myaccount.google.com/apppasswords 生成应用专用密码
535-5.7.8"Username and Password not accepted"密码错误、应用专用密码已失效,或账户密码被修改生成新的应用专用密码
421-4.7.0"Too many concurrent SMTP connections"单个账户同时建立超过 10 个 SMTP 会话缩小连接池或加入指数退避
550-5.4.5"Daily sending quota exceeded"达到每天 500 封(个人)或 2,000 封(Workspace)的上限最多等待 24 小时,滚动窗口重置后恢复
530-5.7.0"Must issue a STARTTLS command first"连接端口 587 时未使用 STARTTLS在客户端启用 STARTTLS,或改用端口 465 的隐式 SSL

2026 年最常见的错误是 534-5.7.9。开发者从老教程复制了使用普通 Gmail 密码的 SMTP 示例。那些示例在 Google 仍允许"安全性较低的应用"访问时是有效的——该访问从 2024 年 9 月 30 日开始关闭,并于 2025 年 5 月 1 日彻底终止。如今每个到 Gmail 的 SMTP 连接都需要应用专用密码或 OAuth 2.0 令牌。

要交互式诊断 SMTP 错误,可以用 openssl 打开一个原始 TLS 连接。它会显示 Google 服务器返回的确切 SMTP 横幅和错误响应,在高层客户端隐藏了原始错误代码时尤其有用。该命令通过隐式 TLS 连接端口 465。

Terminal
# Open a raw TLS connection to Gmail SMTP
openssl s_client -connect smtp.gmail.com:465 -quiet

# You'll see the SMTP banner:
# 220 smtp.gmail.com ESMTP ... - gsmtp

# Authenticate manually:
EHLO localhost
AUTH LOGIN
# Enter base64-encoded username and password
# Google returns 235 on success or 535-5.7.8 on failure

Gmail SMTP 会被弃用吗?

Gmail SMTP 本身并没有被弃用。截至 2026 年 5 月,smtp.gmail.com 服务器仍在端口 587 和 465 上接受连接。变化的是认证方式。过去 4 年里,Google 有计划地移除了那些更简单的认证方式,只留下应用专用密码和 OAuth 2.0。方向很明确:OAuth 才是官方期望的路径。

以下是 Google 已关闭功能的时间线:

日期发生了什么
2022 年 5 月 30 日Google 停止允许新应用启用"安全性较低的应用"访问
2024 年 6 月 15 日"安全性较低的应用"开关从 Workspace 管理控制台中移除
2024 年 9 月 30 日宣布关闭 Google Workspace 账户的"安全性较低的应用"访问;推进于 2024 年 10 月暂停
2025 年 5 月 1 日最终强制执行:所有 Workspace 账户均不再支持"安全性较低的应用"

应用专用密码目前仍然可用,但 Google 自家文档称其为 "not recommended"(不推荐)。它有风险:任何拿到这串 16 位代码的人都拥有该账户的完整 SMTP 访问权限,而且应用专用密码无法限定到特定操作。OAuth 2.0 允许你只申请所需的权限范围(例如用于 SMTP 的 https://mail.google.com/),且令牌会在 3,600 秒后过期。如果在构建新项目,请使用 OAuth。

对于 Workspace 管理员,Google 2023 年 9 月的博客文章 确认了迁移路径:需要邮件访问的应用应使用 OAuth 或 Gmail API。无法使用 OAuth 的打印机和扫描仪应改用 smtp-relay.gmail.com 中继配合基于 IP 的认证。

如何不配置 SMTP 直接发送邮件?

Nylas CLI 通过 Nylas API 发送邮件,无需 SMTP 配置、应用专用密码或 OAuth 令牌管理。一条命令通过浏览器完成 OAuth 认证,后续发送使用存储的凭据,凭据每 3,600 秒自动刷新。从安装到发出第一封邮件,整个设置不到 2 分钟。它适用于 Gmail、Outlook、Exchange、Yahoo、iCloud 和 IMAP 提供商。

用 Homebrew 安装 CLI,然后运行引导式设置。nylas init 命令会引导你完成账户创建、API 密钥设置和邮箱连接。如果已有 Nylas API 密钥,可以直接跳到 nylas auth config。其他安装方式(shell 脚本、PowerShell、Go)请参阅 入门指南

Terminal
# Install Nylas CLI
brew install nylas/nylas-cli/nylas

# Guided setup (creates account, API key, connects mailbox)
nylas init

# Or, if you already have an API key
nylas auth config --api-key nyl_abc123
nylas auth login

# Send an email — no SMTP, no app password, no port config
nylas email send \
  --to recipient@example.com \
  --subject "Sent without SMTP" \
  --body "No smtp.gmail.com, no port 587, no app password."

# Send non-interactively (for scripts and cron jobs)
nylas email send \
  --to ops@company.com \
  --subject "Deploy complete" \
  --body "Build #1847 deployed at $(date)" \
  --yes

对于无人值守运行的脚本,SMTP 与基于 API 的发送差异非常明显。使用 SMTP 时,你要管理凭据(账户密码一改应用专用密码就失效)、连接池(Gmail 限制单账户最多 10 个并发 SMTP 会话)和 TLS 协商。使用 CLI 时,一条命令处理所有这些。该工具将 OAuth 令牌存储在系统密钥环中,并在过期前自动刷新。

对于目前使用 smtplib 配合 Gmail SMTP 设置的 Python 脚本,可以用一次 subprocess 调用替换整个 SMTP 代码块。这能把 SMTP 配置和应用专用密码从代码里彻底移除。不用 SMTP 从 Python 发送邮件指南介绍了完整的迁移模式。

send_email.py
# Before: 15 lines of smtplib + Gmail SMTP config
import smtplib
from email.mime.text import MIMEText

msg = MIMEText("Hello from Python")
msg["Subject"] = "Test"
msg["From"] = "you@gmail.com"
msg["To"] = "recipient@example.com"

with smtplib.SMTP("smtp.gmail.com", 587) as server:
    server.starttls()
    server.login("you@gmail.com", "abcd-efgh-ijkl-mnop")  # app password
    server.send_message(msg)

# After: 1 subprocess call, no SMTP, no password in code
import subprocess
subprocess.run([
    "nylas", "email", "send",
    "--to", "recipient@example.com",
    "--subject", "Test",
    "--body", "Hello from Python",
    "--yes"
], check=True)

如果你的用例确实需要 SMTP(邮件服务器测试、打印机集成、无法调用子进程的遗留应用),本页顶部的设置就是你需要的。其余场景下,通过 API 发送可以去掉这些环节:不用记端口,不用协商 TLS,也不用轮换应用专用密码。

后续步骤