You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gmail账号通过API发邮件时出现421服务不可用错误

解决Gmail SMTP 421 Service not available错误

以下是针对该问题的具体解决方案:

  • 使用应用专用密码替代普通账号密码
    Gmail目前已禁止使用普通账号密码通过SMTP登录,必须先开启账号的两步验证,然后生成应用专用密码,将其替换配置文件中SMTP_PASSWORD对应的环境变量值。

  • 修正SMTP核心配置参数
    Gmail官方SMTP的正确参数如下,检查你的环境变量是否匹配:

    • 主机:smtp.gmail.com
    • 端口:587
      确保配置中secure: false和requireTLS: true的设置保持不变,这是587端口对应的标准配置。
  • 检查账号安全状态
    登录你的Gmail账号,查看是否有异常登录的安全提醒,手动允许当前应用/服务器的访问权限;同时确认账号已开启两步验证,否则无法生成应用专用密码。

  • 控制邮件发送频率
    Gmail免费账号的SMTP发送有每日500封的限额,短时间内大量发送会触发临时限流,导致421错误。调整邮件发送速率,避免超出限制。

  • 验证TLS握手配置
    确保Adonis的邮件客户端能正确处理STARTTLS握手,重点核对端口(必须是587)与requireTLS: true的搭配,端口错误会导致TLS协商失败触发该错误。

你的Adonis Mail配置文件中,需重点确认SMTP_HOST、SMTP_PORT环境变量的正确性,以及SMTP_PASSWORD是否为应用专用密码:

import env from '#start/env'
import { defineConfig, transports } from '@adonisjs/mail'

const mailConfig = defineConfig({
  default: 'smtp',
  from: {
    address: env.get('SMTP_USERNAME') as string,
    name: '[REDACTED]',
  },
  replyTo: {
    address: '[REDACTED]',
    name: '[REDACTED]',
  },

  mailers: {
    smtp: transports.smtp({
      host: env.get('SMTP_HOST'), // 确认是smtp.gmail.com
      port: env.get('SMTP_PORT'), // 确认是587
      auth: {
        type: 'login',
        user: env.get('SMTP_USERNAME') as string,
        pass: env.get('SMTP_PASSWORD') as string, // 替换为应用专用密码
      },
      secure: false,
      requireTLS: true,
    }),
  },
})

export default mailConfig

declare module '@adonisjs/mail/types' {
  export interface MailersList extends InferMailers<typeof mailConfig> {}
}

内容的提问来源于stack exchange,提问作者Raphael Fadimu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:50:02