From 409c1563108bbe7a09505a972f2685736352c0cc Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Sun, 24 May 2026 22:04:06 +0700 Subject: [PATCH] Set status P (processing) before send, revert to S on failure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevents UI re-trigger while email is in flight. Status flow: S (scheduled) → P (processing) → D (delivered) / S (failed, retryable) Co-Authored-By: Claude Sonnet 4.6 --- scripts/send_email.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/send_email.php b/scripts/send_email.php index 878d2692..fc6bed4a 100755 --- a/scripts/send_email.php +++ b/scripts/send_email.php @@ -268,7 +268,7 @@ $sql = " LEFT JOIN m_patient p ON p.M_PatientID = oh.T_OrderHeaderM_PatientID WHERE e.T_SendEmailIsActive = 'Y' - AND e.T_SendEmailStatus = 'S' + AND e.T_SendEmailStatus IN ('S') AND e.T_SendEmailCount < {$max_retry} {$where_id} ORDER BY e.T_SendEmailID ASC @@ -350,6 +350,14 @@ foreach ($rows as $row) { continue; } + // Lock: tandai sedang dikirim agar tidak bisa di-trigger ulang dari UI + $pdo->prepare(" + UPDATE t_send_email + SET T_SendEmailStatus = 'P', + T_SendEmailLastUpdated = NOW() + WHERE T_SendEmailID = ? + ")->execute([$id]); + $err = send_email( $smtp, $from_addr, @@ -396,7 +404,8 @@ foreach ($rows as $row) { log_msg(" Error: {$err}"); $pdo->prepare(" UPDATE t_send_email - SET T_SendEmailCount = T_SendEmailCount + 1, + SET T_SendEmailStatus = 'S', + T_SendEmailCount = T_SendEmailCount + 1, T_SendEmailResponse = ?, T_SendEmailLastUpdated = NOW() WHERE T_SendEmailID = ?