const sgMail = require('@sendgrid/mail');
const kue = require('kue');
// set API key
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
// create a queue
const queue = kue.createQueue();
// process emails in the queue
queue.process('email', (job, done) => {
const { to, from, subject, text, html } = job.data;
// send email using SendGrid
sgMail.send({ to, from, subject, text, html });
// call done when the job is complete
done();
});
// add 10000 emails to the queue
for (let i = 0; i < 10000; i++) {
queue.create('email', {
to: `@example.com">email${i}@example.com`,
from: '[email protected]',
subject: 'Hello',
text: 'Hello, welcome to my website!',
html: '<p>Hello, welcome to my website!</p>',
}).save();
}
- Сначала мы импортируем пакеты
@sendgrid/mailиkue. Пакет@sendgrid/mailпозволяет нам взаимодействовать с API SendGrid, а пакетkue— это мощная очередь заданий для Node.js. - Далее мы устанавливаем ключ API с помощью
sgMail.setApiKey(). Вы можете получить ключ API из своей учетной записи SendGrid. - Затем мы создаем новую очередь, используя
kue.createQueue(). - Мы определяем функцию
process, которая будет вызываться для каждого задания в очереди, эта функция будет отправлять электронную почту с помощью SendGrid. - Внутри цикла for мы добавляем в очередь 10000 заданий, каждое задание содержит данные электронной почты, такие как «кому», «от», «тема», «текст», «html».
- Наконец, мы вызываем метод
.save(), чтобы сохранить задание в очереди.
Этот код использует очередь для обработки большого количества электронных писем. Преимущество использования очереди заключается в том, что она позволяет отправлять электронные письма в фоновом режиме, не блокируя ваше приложение. С очередью ваше приложение может продолжать обрабатывать другие задачи, пока электронные письма отправляются. Кроме того, если при отправке сообщения электронной почты возникают какие-либо ошибки, очередь автоматически повторяет задание, что может помочь гарантировать успешную отправку всех сообщений электронной почты.
Вы также можете установить параметры attempts и backoff при создании задания, чтобы указать, сколько раз задание должно быть повторено в случае сбоя и как долго ждать перед повторной попыткой.
queue.create('email', {
to: `@example.com">email${i}@example.com`,
from: '[email protected]',
subject: 'Hello',
text: 'Hello, welcome to my website!',
html: '<p>Hello, welcome to my website!</p>',
})
.attempts(5)
.backoff({ delay: 60 * 1000, type: 'fixed' })
.save();
Это задание будет повторено 5 раз и будет ждать 60 секунд перед повторной попыткой.