Glitch项目Nodemailer提示邮件发送成功却未收到问题咨询
问题根因
你当前使用的ethereal.email是Nodemailer官方提供的仅用于测试的虚拟SMTP服务,所有通过该服务提交的邮件都不会真实投递到目标邮箱,只会保存在Ethereal的临时测试后台,仅能通过控制台打印的预览链接查看测试邮件内容,这就是控制台显示发送成功但你始终收不到邮件的核心原因。
修复方案
- 替换为可实际投递的SMTP服务:可选择个人常用邮箱的SMTP服务(如QQ邮箱、网易邮箱等),或专业事务邮件服务,替换原有配置中的host、port、auth参数即可。
- 适配对应SMTP服务的配置要求:多数个人邮箱需要先在账号设置中开启SMTP服务,且登录密码需使用服务商生成的专属授权码,而非账号原始密码;部分服务商还会要求配置SSL/TLS参数,你需要对应调整transporter配置中的
secure、tls等字段。 - 优化代码逻辑:你当前的代码同时使用了
await和回调函数处理sendMail请求,属于冗余写法,建议统一使用其中一种方式处理异步逻辑,避免出现不可预期的异常。 - 排查投递拦截问题:配置正确后如果仍未收到邮件,先检查目标邮箱的垃圾邮件、广告邮件文件夹,部分邮箱会默认拦截陌生发件地址的邮件。
以下是可用的配置示例(以QQ邮箱为例):
let account = { user: "你的QQ邮箱地址", pass: "QQ邮箱设置页生成的SMTP专属授权码" } let transporter = nodemailer.createTransport({ host: "smtp.qq.com", port: 587, secure: false, auth: { user: account.user, pass: account.pass, }, }); let mailOptions = { from: `"Contact" <${account.user}>`, to: "实际接收邮件的目标邮箱地址", subject: "New Contact!", text: "Hello world", html: "<b>Hello world</b>", } // 选择一种异步处理方式即可,示例为回调写法 transporter.sendMail(mailOptions, (error, info) => { if(error) return console.log(error); console.log("Message sent: %s", info.messageId); });
内容的提问来源于stack exchange,提问作者Cohen Erickson
相关产品推荐
相关产品推荐

