使用 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) {
        }

    }

但是我收到这个错误:

Unhandled promise rejection (rejection id: 9): Error: connect ETIMEDOUT

怎么了?

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

在您的代码中,您的 fuction(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) {
    }
});

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

嗯,首先,您的电子邮件调用出现了 ETIMEDOUT 错误。您确定所有参数都正确吗?

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

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