使用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
相关产品推荐
相关产品推荐

