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

JavaScript Callback函数未触发:nodemailer发送邮件成功后回调不执行

问题根源

你自定义封装的SendMail方法没有接收、也没有调用你业务代码传入的回调函数,导致你写的打印mail sent的逻辑永远不会被触发:

  • 业务代码调用时传了2个参数:mailer.SendMail(mailOptions, function(err) { ... })
  • 但你的SendMail定义只接收了第一个msg参数,完全没有处理传入的回调函数

解决方法

1. 修改SendMail函数定义,接收回调参数

给SendMail添加第二个入参接收回调函数:

// 修改前
// exports.SendMail = (msg) => {
// 修改后
exports.SendMail = (msg, callback) => {

2. 在nodemailer的内置回调中调用你传入的回调

在transporter.sendMail的内部回调里,把执行结果透传给外部传入的回调:

return transporter.sendMail(msg, function (error, info) {
    if(error) {
        console.log(error);
        // 把错误传递给外部回调
        return callback(error);
    }
    console.log("Message sent "+ info.response)
    // 调用外部回调,传递成功状态
    callback(null, info);
});

可选优化点

  • 不要每次调用SendMail都重新创建transporter实例,可以把transporter初始化放到函数外部复用,减少性能消耗
  • 如果后续要切换成async/await写法,也可以直接返回transporter.sendMail的Promise,不需要回调嵌套

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:57:01