簡體   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