send EMail in Node.JS using nodemailer(Error: 554 6.6.0 Error sending message for delivery)

send EMail in Node.JS using nodemailer(Error: 554 6.6.0 Error sending message for delivery)

我正在尝试使用 nodemailer 模块发送一些电子邮件。

这是我的程序:

const nodeMailer = require('nodemailer');
const randomSentence = require('random-sentence');


let mailList = [
    'gmans8951@gmail.com',
    'hamideh.2020ha@gmail.com',
    'mali1370.goli@gmail.com',
    'golgolniamilad@gmail.com'
]


async function test(){    

    let transporter = nodeMailer.createTransport({
        host: 'smtp.mail.yahoo.com',
        port: '465',
        secure: true,
        auth: {
            user: 'milad1395@yahoo.com',
            pass: 'xxxxxxxxxxx'
        }
    });

    try{
        for (let index = 0; index < mailList.length; index++) {
            let mailBody = randomSentence();
            console.log(mailBody);
            const contact = mailList[index];
            await transporter.sendMail({
                from: 'Node Mailer Test App <milad1395@yahoo.com>',
                to: contact,
                subject: 'test',
                html: mailBody
            })
        }
        console.log('All mails sent successfully!');
    }catch(err){
        console.log(`Error: ${err}`);
    }
}

let forCount = 1;

for (let index = 0; index < forCount; index++) {
    test();
}

如果我运行这个程序,它工作正常:

$ node debug.js                                                                                                                                                    
message 0: Ecmiw perpef suchuf runog olu duiduz remis ehere bevu fetuh leh areri gujin kuvug bifa.
message 1: Tuemigo lelsojkil we fenob meboceuti rifa ci ewiilu fisif uwois apovev seplep kotpi voug vek.
message 2: Suvne goeviru gigiwo dec pitak daiwa edo fifmij ne lad osezo wilomdo ore kebpenu nig zifvi gocpo.
message 3: Kibep pevkih cuf jar du lu li loj gicrioke fuwdij fo fo tiho pupaj pogpisu vogo uja.
All mails sent successfully!

但如果我将 forCount 变量增加到 2,它会发送一些电子邮件,但随后我会收到以下错误消息:

Error: Error: Message failed: 554 6.6.0 Error sending message for delivery.

问题一:为什么会出现这个错误?
问题 2:如何解决这个问题?

终于找到问题的答案:)

这个问题似乎与 Yahoo 服务器有关,与我的代码无关。也许雅虎使用了一种积极的过滤算法来减少其服务器上的流量。

顺便说一句,如果你也遇到这个问题,我建议你迁移到另一个交付提供商(例如 Gmail)。

不要急于指责雅虎。尝试在传输中添加 logger 并启用 debug 以打印以控制完整的 SMTP 通信,以便您可以实际解决问题所在。请参阅下面的传输。

一个可能的问题是您需要从 Yahoo 帐户安全页面创建应用密码。我认为这是必需的,否则您将无法进行身份验证。另一种方法是尝试使用 yahoo 设置并找到允许不安全登录的地方,这样您就可以输入普通密码。我想 Gmail 也有这个。

无论如何,我复制了您的代码并将其修改为仅发送一条消息而不是 4 条消息。对我来说效果很好,可能是因为我提到的应用程序密码。也可以在端口 587 上正常工作。

let transporter = nodeMailer.createTransport({
    logger: true,
    debug: true,
    host: 'smtp.mail.yahoo.com',
    port: 465,
    secure: true, // true if using port 465 and then we want to STARTTLS, should be false if using port 587
    auth: {
        user: 'some_user@yahoo.com',
        pass: 'create_app_pass_from_yahoo_security_page'
    }
});