From f76e3d9fb3dc41a2513b9df315add6283dc57b1f Mon Sep 17 00:00:00 2001 From: isUnknown Date: Tue, 4 Feb 2025 19:00:27 +0100 Subject: [PATCH] newsletter : handle errors --- site/config/config.php | 2 +- .../send-button/routes/send-newsletter.php | 42 +++++++++++-------- .../src/components/SendButtonField.vue | 9 +++- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/site/config/config.php b/site/config/config.php index 88fbc70..a8fea0b 100644 --- a/site/config/config.php +++ b/site/config/config.php @@ -16,7 +16,7 @@ return [ 'username' => 'MS_ncQ2K5@actuel-inactuel.fr', 'password' => 'mssp.ou3hOyX.z86org8y2kklew13.raOTfvP', ], - ], + ], 'routes' => [ require __DIR__ . '/routes/virtual-category.php', require __DIR__ . '/routes/subscribe.php', diff --git a/site/plugins/send-button/routes/send-newsletter.php b/site/plugins/send-button/routes/send-newsletter.php index 17a2a76..0f56d92 100644 --- a/site/plugins/send-button/routes/send-newsletter.php +++ b/site/plugins/send-button/routes/send-newsletter.php @@ -44,8 +44,11 @@ return [ 'name' => 'actuel-inactuel', ]); - try { - foreach ($recipients as $recipient) { + $sentEmails = []; + $errors = []; + + foreach ($recipients as $recipient) { + try { $kirby->email([ 'from' => $from, 'to' => $recipient, @@ -57,23 +60,26 @@ return [ 'recipient' => $recipient, ], ]); + $sentEmails[] = $recipient; + } catch (Exception $error) { + $errors[] = [ + 'email' => $recipient, + 'message' => $error->getMessage(), + ]; } - - if (!$data->isTest) { - $emailPage->changeStatus('listed'); - } else { - $emailPage->changeStatus('unlisted'); - } - - return json_encode([ - 'status' => 'success', - 'message' => 'Email(s) sent successfully.', - ]); - } catch (Exception $error) { - return json_encode([ - 'status' => 'error', - 'message' => $error->getMessage() . ' file ' . $error->getFile() . ' line ' . $error->getLine(), - ]); } + + if (!$data->isTest) { + $emailPage->changeStatus('listed'); + } else { + $emailPage->changeStatus('unlisted'); + } + + return json_encode([ + 'status' => empty($errors) ? 'success' : 'partial', + 'message' => empty($errors) ? 'All emails sent successfully.' : 'Certains emails n\'ont pas pu être envoyé.', + 'sent' => $sentEmails, + 'failed' => $errors, + ]); }, ]; diff --git a/site/plugins/send-button/src/components/SendButtonField.vue b/site/plugins/send-button/src/components/SendButtonField.vue index 2aaf7d1..b6ba731 100755 --- a/site/plugins/send-button/src/components/SendButtonField.vue +++ b/site/plugins/send-button/src/components/SendButtonField.vue @@ -106,7 +106,14 @@ async function send(event, isTest = false) { location.href = location.href; }, 2000); } else { - throw new Error(data.message || "Erreur inconnue"); + let errorMessage = data.message || "Erreur inconnue"; + + if (data.failed && data.failed.length > 0) { + const failedEmails = data.failed.map((f) => f.email).join(", "); + errorMessage += `\nEmails non envoyés : ${failedEmails}`; + } + + throw new Error(errorMessage); } } catch (error) { currentBtnState.value = {