У меня точно такая же проблема, как и в этом сообщении: Отправляйте несколько писем с помощью nodemailer и gmail < / а>
При отправке слишком большого количества писем с помощью nodemailer и gmail я получаю ошибку 421, относящуюся к слишком большому количеству одновременных сеансов.
Что я могу сделать, чтобы не открывать слишком много сеансов?
Я уже связался с Google, который подтвердил, что я не заблокирован никакими ограничениями (я не набрал количество ежедневных писем, и нет ограничений на почту в минуту). Я пытался дождаться отправки каждого письма перед отправкой нового; для создания и закрытия нового транспорта в каждой почте, но я продолжаю получать эту ошибку примерно после сотого письма.
Вот полная ошибка:
{ [Error: Mail command failed: 421 4.7.0 Try again later, closing
connection. (MAIL) e17sm2124566ede.14 - gsmtp]
code: 'EENVELOPE',
response: '421 4.7.0 Try again later, closing connection. (MAIL)
e17sm2124566ede.14 - gsmtp',
responseCode: 421,
command: 'MAIL FROM' }
И мой код:
Настройки Nodemailer:
function setMailTransport () {
return nodemailer.createTransport(smtpTransport({
service: 'gmail',
ignoreTLS: true,
auth: {
xoauth2: xoauth2.createXOAuth2Generator({
user: 'xxxxxx',
clientId: 'xxxxxx',
clientSecret: 'xxxxxx',
refreshToken: 'xxxxxx'
})
}
}))
}
Отправка уникального письма:
async function sendEmail (mail) {
// mail is an object {from, to, subject, text, html}
const transport = setMailTransport()
try {
await transport.sendMail(mail)
await transport.close()
return 1
} catch (err) {
console.log(err)
await transport.close()
return 0
}
}
Рекурсивная функция async / await для ожидания отправки письма перед отправкой нового:
async function sendAlerts (mails, index, numberOfMailSent) {
// mails is an array of mail object, index start at 0
// numberOfMailSent is just a counter to know how many mails have been sent
if (index >= mails.length) return numberOfMailSent
const mail = mails[position]
const newMailSent = await sendEmail(mail)
return sendAlerts(mails, index + 1, numberOfMailSent + newMailSent)
}
Есть идеи, где я мог ошибиться или каким-то другим способом отправить более 100 писем?