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

Nest.js集成Nodemailer发信报421连接过多错误求助

修复方案

先修正配置错误

你现有配置存在几个直接触发服务端拦截的问题:

  • 强制指定tls.ciphers: 'SSLv3'是核心错误。SSLv3是存在已知严重漏洞的废弃加密协议,Outlook、Zoho等所有主流邮件服务商早已全面禁用该协议,强制使用会直接导致TLS握手失败,服务端会主动断开连接,短时间高频重试就会触发421连接限流,直接删掉该配置即可。
  • 未显式指定SMTP端口时,Nodemailer默认会走25端口。一方面绝大多数家用宽带运营商会封禁25端口的外发请求,另一方面各大邮件服务商对25端口的连接频率限制极严,Outlook官方SMTP对应STARTTLS加密的端口是587,必须显式配置。
  • 未开启连接池。Nodemailer默认不复用连接,每次调用sendMail都会新建TCP连接,本地开发阶段的热重载、接口重复调用会瞬间创建大量连接,直接触发服务商的连接数阈值。

正确配置参考

调整后的MailerModule配置如下:

import { MailerModule } from '@nestjs-modules/mailer';

@Module({
    imports: [
        MailerModule.forRoot({
            transport: {
                host: 'smtp-mail.outlook.com',
                port: 587,
                secure: false, // 587端口对应STARTTLS模式,保持false即可
                pool: true, // 启用连接池复用连接
                maxConnections: 1, // 本地测试限制单连接,彻底避免连接数超限
                auth: {
                    user: process.env.OUTLOOK_USER,
                    pass: process.env.OUTLOOK_PASSWORD // 账号开了两步验证的话,这里要填专门的SMTP应用密码,不能用登录密码
                },
                tls: {
                    rejectUnauthorized: false // 本地测试如果遇到自签名证书问题可加该配置,生产环境记得删掉
                }
            },
            defaults : {
                from: process.env.OUTLOOK_USER
            } 
        }),
    ],
})
export class MailsModule {}

你的邮件发送调用逻辑本身没有问题,不需要调整。

本地环境特殊排查项

  • 改完配置不要立刻重启测试,你之前的高频失败请求已经触发了Outlook的临时IP封禁,先等15-30分钟让限流规则过期再试,否则配置正确也会持续报421错误。
  • 等待冷却后如果还是报错,先测试本地网络连通性:在命令行执行telnet smtp-mail.outlook.com 587,如果连接超时,说明本地运营商封禁了SMTP出网端口,直接切换手机热点测试即可,这种情况改代码没有任何作用。
  • 切换Zoho服务也报相同错误,基本都是上述配置错误+本地住宅IP被服务商标记为动态IP导致的——主流邮件服务商为了拦截垃圾邮件,对住宅宽带的动态IP默认设置了极高的拦截阈值,正式上线部署到服务器后(固定IP、加好SPF/DKIM解析)这个问题会自动消失。
  • 确认Outlook账号设置里已经开启了SMTP发信权限,如果开启了两步验证,必须生成应用密码作为SMTP登录凭证,使用普通登录密码会被直接拒绝访问,重试多了同样会触发限流。

内容的提问来源于stack exchange,提问作者Prince Igwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:51:24