使用Firebase Functions发送邮件出现Unexpected socket close错误如何解决?
问题解决方案
1. 确认Firebase计费计划符合要求
Firebase免费的Spark计划仅允许访问谷歌旗下服务,无法发起外部SMTP请求,必须升级到Blaze按需付费计划才能正常调用邮件发送接口。
2. 修正Gmail认证配置
2022年起谷歌已全面禁用普通账号密码登陆Gmail发送邮件的权限,你需要按以下步骤调整:
- 为你的发件谷歌账号开启两步验证
- 生成应用专用密码,替换transport配置中原有的账号密码
- 确保transport配置参数正确,示例配置如下:
const nodemailer = require('nodemailer'); const transport = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { user: 'xxxxxxx@gmail.com', pass: '你生成的应用专用密码' } });
3. 确保云函数正确等待异步任务完成
你当前的sendEmail函数已经返回了sendMail的Promise,需要确认你在存储触发器的上层逻辑中,正确返回了sendEmail函数的执行结果,不要直接调用后忽略返回值,否则云函数会在邮件发送完成前提前销毁运行环境,中断socket连接导致报错。
4. 其他可选优化
如果频繁遇到限流问题,建议替换为事务邮件专用服务,稳定性远高于直接使用Gmail发件。
内容的提问来源于stack exchange,提问作者Emili Bellot Pulido
相关产品推荐
相关产品推荐

