diff --git a/src/Command/Cron.php b/src/Command/Cron.php index e525f658..ba31d489 100755 --- a/src/Command/Cron.php +++ b/src/Command/Cron.php @@ -147,5 +147,6 @@ EOL; // Run email queue $jobs->processEmailQueue(); + $jobs->processEmailQueue_bulk(); // 群发 } } diff --git a/src/Services/Cron.php b/src/Services/Cron.php index 80456beb..e33baebc 100755 --- a/src/Services/Cron.php +++ b/src/Services/Cron.php @@ -436,7 +436,7 @@ final class Cron } DB::beginTransaction(); - $email_queues_raw = DB::select('SELECT * FROM email_queue LIMIT 1 FOR UPDATE SKIP LOCKED'); + $email_queues_raw = DB::select('SELECT * FROM email_queue where `type` is NULL LIMIT 1 FOR UPDATE SKIP LOCKED'); if (count($email_queues_raw) === 0) { DB::commit(); @@ -453,21 +453,21 @@ final class Cron if (Tools::isEmail($email_queue['to_email'])) { try { - if (isset($email_queue['type']) && $email_queue['type'] == "bulk") { - Mail::send_bulk( - $email_queue['to_email'], - $email_queue['subject'], - $email_queue['template'], - json_decode($email_queue['array']) - ); - } else { +// if (isset($email_queue['type']) && $email_queue['type'] == "bulk") { +// Mail::send_bulk( +// $email_queue['to_email'], +// $email_queue['subject'], +// $email_queue['template'], +// json_decode($email_queue['array']) +// ); +// } else { Mail::send( $email_queue['to_email'], $email_queue['subject'], $email_queue['template'], json_decode($email_queue['array']) ); - } +// } } catch (Exception|ClientExceptionInterface $e) { echo $e->getMessage(); @@ -482,6 +482,68 @@ final class Cron echo Tools::toDateTime(time()) . ' 邮件队列处理完成' . PHP_EOL; } } + + public static function processEmailQueue_bulk(): void + { + if ((new EmailQueue())->count() === 0) { + echo Tools::toDateTime(time()) . ' 队列邮件队列为空' . PHP_EOL; + } else { + //记录当前时间戳 + $timestamp = time(); + //邮件队列处理 + while (true) { + if (time() - $timestamp > 299) { + echo Tools::toDateTime(time()) . '队列邮件队列处理超时,已跳过' . PHP_EOL; + break; + } + + DB::beginTransaction(); + $email_queues_raw = DB::select('SELECT * FROM email_queue where `type` = "bulk" LIMIT 1 FOR UPDATE SKIP LOCKED'); + + if (count($email_queues_raw) === 0) { + DB::commit(); + break; + } + + $email_queues = array_map(static function ($value) { + return (array) $value; + }, $email_queues_raw); + $email_queue = $email_queues[0]; + echo '发送邮件至 ' . $email_queue['to_email'] . PHP_EOL; + DB::delete('DELETE FROM email_queue WHERE id = ?', [$email_queue['id']]); + + if (Tools::isEmail($email_queue['to_email'])) { + try { + +// if (isset($email_queue['type']) && $email_queue['type'] == "bulk") { + Mail::send_bulk( + $email_queue['to_email'], + $email_queue['subject'], + $email_queue['template'], + json_decode($email_queue['array']) + ); +// } else { +// Mail::send( +// $email_queue['to_email'], +// $email_queue['subject'], +// $email_queue['template'], +// json_decode($email_queue['array']) +// ); +// } + + } catch (Exception|ClientExceptionInterface $e) { + echo $e->getMessage(); + } + } else { + echo $email_queue['to_email'] . ' 邮箱格式错误,已跳过' . PHP_EOL; + } + + DB::commit(); + } + + echo Tools::toDateTime(time()) . ' 群发邮件队列处理完成' . PHP_EOL; + } + } // 激活订单 /**