使用Node.js发送电子邮件时未处理的承诺拒绝

时间:2017-06-28 14:54:04

标签: javascript node.js nodemailer

我使用此脚本发送电子邮件:

var mailer = require('nodemailer');

var smtpTransport = mailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'user',
        pass: 'pass'
    }
});

 smtpTransport.sendMail({       
        sender: 'user',
        to: 'user',
        subject: 'Attachment!',
        body: 'mail content...',
        attachments: [{   
        filename: 'text3.txt',
        path: 'pat/to/file.txt' 
    }]
    }), function(err, success) {
        if (err) {
        }

    }

但是我收到了这个错误:

  

未处理的承诺拒绝(拒绝ID:9):错误:连接   ETIMEDOUT

出了什么问题?

3 个答案:

答案 0 :(得分:6)

未处理的Promise拒绝意味着有一些Promise函数没有 .catch 。 Nodemailer的.sendMail函数是一个Promise函数,因此您可以进行回调或像Promise一样使用它。

在您的代码中,您的功能(错误,成功)不在您的.sendMail功能之内。以下是您可以纠正的方法:

 smtpTransport.sendMail({       
    sender: 'user',
    to: 'user',
    subject: 'Attachment!',
    body: 'mail content...',
    attachments: [{   
    filename: 'text3.txt',
    path: 'pat/to/file.txt' 
}]
},(err, success) => {
    if (err) {
    }
});

答案 1 :(得分:3)

嗯,首先出现的问题是您的电子邮件来自ETIMEDOUT错误。您确定所有参数都正确吗?

其次使用Promise,而不是回调样式,并抓住拒绝。像这样,

smtpTransport
  .sendMail(...)
  .then(success => console.log('success: ', success))
  .catch(error => console.log('error: ', error))

答案 2 :(得分:0)

可能是对GMail的拒绝,请尝试登录:https//www.google.com/setti ngs/security/lesssecureapps并点击“访问不太安全的应用”。 或者使用OAuth。