'/send-newsletter.json', 'method' => 'POST', 'action' => function () { $jsonRequest = file_get_contents('php://input'); $data = json_decode($jsonRequest); if (!$data || !isset($data->pageUri) || !isset($data->isTest)) { return json_encode([ 'status' => 'error', 'message' => 'Invalid request data. Required fields: pageUri, isTest.', ]); } $kirby = kirby(); $emailPage = page('lettre')->childrenAndDrafts()->find($data->pageUri); if (!$emailPage) { return json_encode([ 'status' => 'error', 'message' => 'The specified page does not exist.', ]); } $recipients = $data->isTest ? $kirby->users()->pluck('email', null, true) : page('lettre')->subscribers()->toStructure()->pluck('email', true, true); if (empty($recipients)) { return json_encode([ 'status' => 'error', 'message' => 'No recipients found.', ]); } $subject = $data->isTest ? '[TEST] - ' . $emailPage->title()->value() : $emailPage->title()->value(); $from = new \Kirby\Cms\User([ 'email' => 'info@actuel-inactuel.fr', 'name' => 'actuel-inactuel', ]); try { foreach ($recipients as $recipient) { $kirby->email([ 'from' => $from, 'to' => $recipient, 'subject' => $subject, 'template' => 'newsletter', 'data' => [ 'body' => $emailPage->body(), 'url' => (string) $emailPage->url(), 'recipient' => $recipient, ], ]); } 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(), ]); } }, ];