Ghost 无法登录?解决新设备强制验证收不到邮件的问题

最近在阿里云服务器上部署了最新的 Ghost 5.x (Docker版),在首次登录后台时遇到一个死循环:Ghost 强制要求进行“新设备登录验证”,但我根本收不到邮件。

经过一番折腾,发现这是由于 Ghost 新版本的安全机制变更、云厂商端口封禁以及旧配置失效共同导致的。本文将介绍如何使用 Ethereal(一个开发者专用的虚拟邮件服务)来完美解决这个问题。

问题现象

  1. 换新设备,访问 /ghost 后台。
  2. 输入账号密码,点击登录。
  3. 问题来了:登录按钮变成了一个旋转的圆圈,一直转个不停。
  4. 打开浏览器开发者工具 (F12 -> Network),发现 session 接口的状态一直是 Pending (挂起) 直到超时,或者报 Failed

原因分析

为什么会陷入这个死局?主要有三个原因凑在了一起:

  1. Ghost 5.x 的强制安全机制
    出于安全考虑,Ghost 官方在 v5 版本中彻底移除了“禁用新设备校验”的开关。只要 IP 变动或首次登录,必须验证邮件。
  2. 旧的“日志模式”已废弃
    以前我们可以把邮件配置改成 jsonstream 模式,让验证码打印在服务器日志里。但最新的 Ghost (v5.x) 已经不再支持这些参数,配置了会导致服务直接崩溃 (Error: Unknown mail transport)。
  3. 云服务器封禁 25 端口
    阿里云、AWS 等主流云厂商默认封禁 25 端口。如果没有配置第三方 SMTP(如 Mailgun),Ghost 尝试直连发信会被防火墙拦截,导致请求超时。

解决方案:使用 Ethereal "伪造" 邮件服务

既然我们暂时没有配置正式的邮件服务(如 Mailgun),又必须让 Ghost 觉得邮件“发成功”了,Ethereal.email 是最佳救星。

它是一个免费的伪造 SMTP 服务,Ghost 发给它的邮件会被拦截在 Ethereal 的网页上,而不会真的发到你邮箱。我们直接在网页上查看验证码即可。

第一步:获取 Ethereal 账号

  1. 打开 https://ethereal.email/
  2. 点击首页的 "Create Ethereal Account"
  3. 页面会生成一组临时的 SMTP 账号信息,记下以下内容:
    • Host: smtp.ethereal.email
    • Port: 587
    • Username: (例如 maddison53@ethereal.email)
    • Password: (一串字符)

第二步:修改 Ghost 配置 (Docker Compose)

修改你的 docker-compose.yml,在 environment 中填入刚才获取的账号。

version: '3.1'

services:
  ghost:
    image: ghost:5-alpine
    restart: always
    ports:
      - 8089:2368
    volumes:
      - ./content:/var/lib/ghost/content
    environment:
      # 基础配置
      url: https://你的域名.com
      database__client: mysql
      # ... 数据库配置略 ...

      # 【核心修改】配置 Ethereal 邮件服务
      mail__transport: SMTP
      mail__options__host: smtp.ethereal.email
      mail__options__port: 587
      # 填入你刚才生成的账号密码
      mail__options__auth__user: "你的Ethereal账号"
      mail__options__auth__pass: "你的Ethereal密码"
      # 发件人随便填
      mail__from: noreply@你的域名.com

第三步:重启服务

docker-compose up -d

第四步:获取验证码并登录

  1. 回到 Ghost 后台,再次点击登录。此时 Ghost 会顺利发送邮件(因为它连的是 Ethereal 的 587 端口,不会被阿里云拦截)。
  2. 回到 ethereal.email 网页
  3. 点击 "Check Messages"
  4. 你会看到一封来自 Ghost 的邮件,点开它,复制里面的 6 位数验证码
  5. 回到 Ghost 后台填入,登录成功!

总结

在 Ghost 5.x 严格的安全策略下,Ethereal 是解决“鸡生蛋、蛋生鸡”(没登录无法配邮件,没邮件无法登录)死循环的最佳工具。

虽然这只是权宜之计,但它不需要域名验证、不需要备案,能让你先进入后台。等你准备好正式运营时,建议再替换为 Mailgun 或阿里云邮件推送服务。