繁体   English   中英

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

[英]Unhandled promise rejection while sending email using Node.js

我正在使用以下脚本发送电子邮件:

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

怎么了?

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

在您的代码中,功能(err,sucess)在.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) {
    }
});

好吧,首先是错误的是,您的电子邮件通话中出现了ETIMEDOUT错误。 您确定所有参数正确吗?

其次,使用Promises,而不是回调样式,并捕获拒绝。 像这样,

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

可能是GMail拒绝了,请尝试登录到: https // www.google.com / setti ngs / security / lesssecureapps并打开“ 访问安全性较低的应用程序 ”。 或使用OAuth。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM