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'
}
});
我正在尝试使用 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'
}
});