diff --git a/site/plugins/send-button/routes/send-newsletter.php b/site/plugins/send-button/routes/send-newsletter.php index 0f56d92..7e34840 100644 --- a/site/plugins/send-button/routes/send-newsletter.php +++ b/site/plugins/send-button/routes/send-newsletter.php @@ -1,5 +1,7 @@ '/send-newsletter.json', 'method' => 'POST', @@ -26,7 +28,7 @@ return [ $recipients = $data->isTest ? $kirby->users()->pluck('email', null, true) - : page('lettre')->subscribers()->toStructure()->pluck('email', true, true); + : page('lettre')->subscribers()->toStructure()->pluck('email', ',', true); if (empty($recipients)) { return json_encode([ @@ -47,26 +49,33 @@ return [ $sentEmails = []; $errors = []; - foreach ($recipients as $recipient) { - try { - $kirby->email([ - 'from' => $from, - 'to' => $recipient, - 'subject' => $subject, - 'template' => 'newsletter', - 'data' => [ - 'body' => $emailPage->body(), - 'url' => (string) $emailPage->url(), - 'recipient' => $recipient, - ], - ]); - $sentEmails[] = $recipient; - } catch (Exception $error) { - $errors[] = [ - 'email' => $recipient, - 'message' => $error->getMessage(), - ]; + $batchSize = 5; + $pauseBetweenBatches = 1; + + foreach (array_chunk($recipients, $batchSize) as $batch) { + foreach ($batch as $recipient) { + try { + $kirby->email([ + 'from' => $from, + 'to' => $recipient, + 'subject' => $subject, + 'template' => 'newsletter', + 'data' => [ + 'body' => $emailPage->body(), + 'url' => (string) $emailPage->url(), + 'recipient' => $recipient, + ], + ]); + $sentEmails[] = $recipient; + } catch (Exception $error) { + $errors[] = [ + 'email' => $recipient, + 'message' => $error->getMessage(), + ]; + } } + + sleep($pauseBetweenBatches); } if (!$data->isTest) {