Express.js+Postman报错:getaddrinfo ENOTFOUND smpt.mailtrap.io 求解决
密码重置邮件发送失败问题排查
问题场景
我正在实现密码重置功能:生成重置令牌后,向用户发送包含令牌链接的邮件。相关代码、请求信息及错误响应如下:
相关代码
1. authController 中的 forgotPassword 函数
//forgot password => /api/v1/password/forgot exports.forgotPassword = catchAsynErrors(async(req, res, next) => { const user = await User.findOne({ email: req.body.email }); if(!user){ return next(new ErrorHandler('User not found with this email', 404)); } //get reset token const resetToken = user.getResetPasswordToken(); await user.save({validateBeforeSave: false}); // create reset password url const resetUrl = `${req.protocol}://${req.get('host')}/api/v1/password/reset/${resetToken}`; const message = `Your password reset token:\n\n${resetUrl}\n\n If you have not requested this email, please ignore it.` try { await sendEmail({ email: user.email, subject: 'ShopIt password recovery', message }) res.status(200).json({ success: true, message: `Email sent to: ${user.email}` }) } catch (error) { user.resetPasswordToken = undefined; user.resetPasswordExpire = undefined; await user.save({validateBeforeSave: false}); return next(new ErrorHandler(error.message, 500)) } })
2. User 模型中的 getResetPasswordToken 方法
// generate password reset token userSchema.methods.getResetPasswordToken = function() { //generate token const resetToken = crypto.randomBytes(20).toString('hex'); //hash and set to resetPasswordToken this.resetPasswordToken = crypto.createHash('sha256').update(resetToken).digest('hex') // set token expiration date this.resetPasswordExpire = Date.now() + 30 * 60 * 1000 return resetToken }
请求信息
通过Postman向 http://localhost:4000/api/v1/password/forgot 发送POST请求,请求体:
{ "email": "example@email.com" }
错误响应
{ "success": false, "error": { "statusCode": 500 }, "errMessage": "getaddrinfo ENOTFOUND smpt.mailtrap.io", "stack": "Error: getaddrinfo ENOTFOUND smpt.mailtrap.io\n at D:\\pruebas de programación\\Proyectazo\\backend\\controllers\\authController.js:93:21\n at processTicksAndRejections (node:internal/process/task_queues:96:5)" }
已尝试操作
- 手动设置IPv4地址(如192.168.1.45)及DNS服务器为1.1.1.1、1.0.0.1,网络正常但错误依旧,已恢复DHCP配置
- 尝试发送邮件至真实或虚假邮箱,结果无差别
解决思路
- 优先修正SMTP域名拼写:错误信息中的
smpt.mailtrap.io存在拼写错误,正确的Mailtrap SMTP服务器地址应为smtp.mailtrap.io(注意是smtp而非smpt),检查sendEmail工具类的配置域名是否写错 - 验证Mailtrap配置完整性:确认SMTP端口、用户名、密码是否与Mailtrap控制台提供的信息完全一致,避免凭证或端口错误导致连接失败
- 测试网络连通性:在终端执行
ping smtp.mailtrap.io或telnet smtp.mailtrap.io 2525(对应Mailtrap常用端口),确认本地网络能正常访问该服务器 - 排查防火墙/代理拦截:临时关闭本地防火墙,或配置代理规则允许访问Mailtrap的SMTP端口,排除网络拦截问题
- 极简脚本测试:编写独立的邮件发送测试脚本,直接调用
sendEmail发送邮件,排除业务代码逻辑干扰,验证核心邮件发送功能是否正常
内容的提问来源于stack exchange,提问作者Tort
相关产品推荐
相关产品推荐

