Guide
从邮件中提取 OTP 验证码——跳过收件箱
不再为每次 2FA 验证码切换到收件箱。nylas otp get 扫描近期邮件中的验证码,并在不到一秒内将结果复制到剪贴板。支持所有主流邮件服务商——无需浏览器。
Written by Nick Barraclough Product Manager
Reviewed by Qasim Muhammad
为什么从邮件中提取 OTP 验证码很困难?
从邮件中提取 OTP 验证码很困难,因为每次验证都会以 30–60 秒的上下文切换打断你的工作流—— 打开收件箱、扫描消息、在精心设计的模板中定位 6 位数字验证码、将其输入登录提示框,然后切换回原来的任务。
对于运行集成测试或端到端流程的开发者来说,问题更严重。以编程方式提取验证码意味着需要为每个服务商编写自定义邮件轮询逻辑——Gmail API、Microsoft Graph、IMAP idle——然后实际测试才能开始。根据 FIDO Alliance Online Authentication Barometer,用户在验证过慢时经常放弃注册,而脆弱的 OTP 提取代码是导致 E2E 测试套件不稳定的主要原因之一。
Nylas CLI 用一条命令解决了这两个问题: nylas otp get 扫描 Gmail、Outlook、Yahoo、iCloud 和任何 IMAP 服务器上的近期消息,提取验证码,并在不到 1 秒内复制到剪贴板。
1. 安装
安装 Nylas CLI 只需一条 Homebrew 命令,在大多数机器上 30 秒内完成。CLI 二进制文件约 25 MB,支持 macOS、Linux 和 Windows。Homebrew 是 macOS 和 Linux 用户最快的安装途径。
brew install nylas/nylas-cli/nylasShell 脚本、PowerShell 和 Go 安装方式请参见 入门指南。安装后,通过检查版本确认 CLI 可用:
nylas --version2. 认证
认证将 Nylas CLI 连接到你的邮件账户,使其能够扫描消息中的 OTP 验证码。CLI 支持 6 种服务商类型——Gmail、Outlook、Exchange(EWS)、Yahoo Mail、iCloud Mail 和通用 IMAP——全部通过一个认证步骤完成。无需针对每个服务商单独配置。
从 Nylas Dashboard 生成 API 密钥,然后传递给 CLI。凭据存储在本地的 ~/.config/nylas/ 目录中,绝不会发送给第三方。
nylas auth config --api-key YOUR_API_KEY3. 获取最新的 OTP 验证码
nylas otp get 命令扫描近期邮件,提取最新的验证码,并将其复制到剪贴板——通常在不到 1 秒内完成。大多数基于邮件的 OTP 验证码是 6 位数字,在 5–10 分钟内过期,如 RFC 6238(TOTP)所定义。
不带参数运行命令会从默认账户获取最新的验证码。CLI 搜索最近的消息中常见的 OTP 模式(嵌入在验证类邮件中的数字码)并返回匹配结果。
nylas otp get✓ OTP found
Code: 847291
From: noreply@github.com
Subject: Your GitHub verification code
Copied to clipboard对于脚本编写和 CI/CD 管线——不需要剪贴板副作用的场景—— --raw 标志仅输出纯验证码。这使得在 shell 变量中捕获值变得容易。
nylas otp get --raw847291要在终端输出中保持验证码可见但不复制到剪贴板,使用 --no-copy 标志。当你想在屏幕上读取验证码并手动输入时很有用。
nylas otp get --no-copy4. 监视传入的 OTP 验证码
nylas otp watch 命令持续轮询你的收件箱,并在每个新 OTP 验证码到达时打印。当你触发了一个发送验证邮件的操作,需要在不确定何时到达的情况下捕获验证码时很有用。默认轮询间隔为 5 秒,这意味着大多数验证码在送达后 5–10 秒内出现。
不带参数运行命令开始监视。CLI 持续轮询直到你按 Ctrl+C。每个验证码都带有时间戳和发送者地址。
nylas otp watchWatching for OTP codes... (Ctrl+C to stop)
[14:23:05] 847291 — noreply@github.com
[14:31:18] 193047 — security@google.com--interval 标志设置轮询频率(秒)。更短的间隔能更快捕获验证码,但会发送更多 API 请求。大多数场景下,5–10 秒在速度和效率之间取得了平衡。
nylas otp watch --interval 5在没有剪贴板访问权限的终端中运行时,将 --no-copy 与自定义间隔结合使用,例如远程 SSH 会话或 Docker 容器。
nylas otp watch --no-copy --interval 105. 列出已配置的账户
nylas otp list 命令显示连接到 Nylas CLI 的每个邮件账户及其服务商类型。使用多个账户的开发者——例如个人 Gmail 和企业 Outlook 租户——可以用此命令确认在获取验证码之前哪些账户可用。CLI 在单一配置中最多支持 6 种服务商类型。
输出中的每一行将邮件地址映射到检测到的服务商。这使得在调用 nylas otp get 时可以轻松确定目标账户。
nylas otp list ACCOUNT PROVIDER
user@gmail.com Gmail
work@company.com Outlook
personal@icloud.com iCloud要从特定账户而非默认账户获取验证码,将邮件地址作为参数传递。当多个账户都有近期 OTP 邮件时,这可以避免歧义。
nylas otp get user@gmail.com6. 在脚本中使用 OTP 验证码
--raw 标志将 nylas otp get 变成 shell 脚本、CI/CD 管线和端到端测试框架的可组合构建块。因为它只输出不带格式的纯验证码,所以可以直接用标准命令替换将结果捕获到变量中。
下面的脚本演示了完整的 OTP 验证流程:通过 API 调用触发密码重置邮件,等待 3 秒让邮件送达,提取验证码,然后提交。在生产 CI 环境中,这个模式替代了 20–50 行自定义的服务商特定轮询逻辑。
#!/usr/bin/env bash
set -euo pipefail
EMAIL="user@example.com"
API_BASE="https://app.example.com/api"
# 触发 OTP 邮件
curl -s -X POST "$API_BASE/auth/send-otp" \
-H "Content-Type: application/json" \
-d "{"email": "$EMAIL"}"
# 等待送达,然后获取验证码
sleep 3
CODE=$(nylas otp get --raw)
echo "Got code: $CODE"
# 提交验证码
curl -s -X POST "$API_BASE/auth/verify-otp" \
-H "Content-Type: application/json" \
-d "{"email": "$EMAIL", "code": "$CODE"}"
echo "Verified."在 GitHub Actions 等 CI/CD 环境中,将 Nylas API 密钥存储为仓库 secret。下面的示例展示了一个 2 步工作流:第一步配置认证,第二步运行 OTP 测试脚本。这种方式将凭据完全排除在源代码控制之外。
# GitHub Actions 示例
- name: Authenticate Nylas CLI
run: nylas auth config --api-key ${{ secrets.NYLAS_API_KEY }}
- name: Run OTP flow test
run: ./scripts/test-otp-flow.shCLI 自动读取 NYLAS_API_KEY 环境变量,所以你可以在临时 CI 环境中跳过 nylas auth config 步骤。对于文件系统不会在作业之间持久化的容器和 serverless runner,这是推荐的方式。
# 设置环境变量——CLI 自动识别
export NYLAS_API_KEY=your_key
CODE=$(nylas otp get --raw)后续步骤
- 使用 Playwright 进行 E2E 邮件测试 — 将 OTP 提取与完整的端到端测试流程结合
- 邮件作为 AI 智能体的身份 — 通过基于邮件的验证来认证 AI 工作流
- CI/CD 中的 PowerShell 邮件 — 依赖邮件的管线的 Windows 原生自动化
- Nylas CLI 入门 — 5 分钟内连接你的第一个账户
- 命令参考 — 每个标志、子命令和示例
- RFC 6238 -- TOTP: Time-Based One-Time Password — 你正在从邮件中提取的时间窗口验证码的规范