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 секунд перед повторной попыткой.