[英]Send multipe emails using nodemailer and gmail
我正在嘗試向多個收件人(約3.000)發送電子郵件。 所有電子郵件都存儲在我的數據庫(Mongo)中。 因此,我進行查詢以返回所有電子郵件地址,並使用async發送所有電子郵件,例如:
function _sendEmail(params, callback) {
async.each(params.email, function(user, cb) {
const mailOptions = {
from: sender
to: user,
subject: Subject,
text: 'Hello Word',
};
app.transporter.sendMail(mailOptions, function(err, response) {
if(err) console.log(err);
else console.log(response);
cb();
});
}, callback);
}
我正在app.js中創建nodemailer transporte,如下所示:
const transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.gmail.com',
port: 465,
secure: true,
auth: {
user: senderMail,
pass: senderMailPassword
}
}));
當我嘗試僅將其發送到10個郵件時,它工作正常,但是當我嘗試將其發送到數據庫中的所有電子郵件時,卻多次出現此錯誤:
{ [Error: Data command failed: 421 4.7.0 Temporary System Problem. Try again later (WS). g32sm7412411qtd.28 - gsmtp]
code: 'EENVELOPE',
response: '421 4.7.0 Temporary System Problem. Try again later (WS). g32sm7412411qtd.28 - gsmtp',
responseCode: 421,
command: 'DATA' }
我想念什么嗎? 我是否需要設置一些內容以便能夠在短時間內發送大量郵件? 我正在使用一個Gmail帳戶來做到這一點!
提前致謝!
來自Gmail:421 SMTP服務器錯誤:並發會話過多
您可以用不同的方式處理發送:
等待關閉每次發送之間的會話
通過一堆郵件發送
最好的方法是設法同時不要超過10個會話的限制:)
這是因為您試圖為每個電子郵件創建一個新的smtp連接。 您需要使用SMTP池。 當您有大量要批量發送的消息,或者您的提供程序僅允許使用少量並行連接時,池化smtp最為有用。
const transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.gmail.com',
port: 465,
pool: true, // This is the field you need to add
secure: true,
auth: {
user: senderMail,
pass: senderMailPassword
}
}));
您可以關閉游泳池
transporter.close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.