no message

This commit is contained in:
hellcat 2025-06-29 18:13:58 +08:00
parent a3654b33ef
commit aa809d41d1
2 changed files with 73 additions and 10 deletions

View File

@ -147,5 +147,6 @@ EOL;
// Run email queue // Run email queue
$jobs->processEmailQueue(); $jobs->processEmailQueue();
$jobs->processEmailQueue_bulk(); // 群发
} }
} }

View File

@ -436,7 +436,7 @@ final class Cron
} }
DB::beginTransaction(); 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) { if (count($email_queues_raw) === 0) {
DB::commit(); DB::commit();
@ -453,21 +453,21 @@ final class Cron
if (Tools::isEmail($email_queue['to_email'])) { if (Tools::isEmail($email_queue['to_email'])) {
try { try {
if (isset($email_queue['type']) && $email_queue['type'] == "bulk") { // if (isset($email_queue['type']) && $email_queue['type'] == "bulk") {
Mail::send_bulk( // Mail::send_bulk(
$email_queue['to_email'], // $email_queue['to_email'],
$email_queue['subject'], // $email_queue['subject'],
$email_queue['template'], // $email_queue['template'],
json_decode($email_queue['array']) // json_decode($email_queue['array'])
); // );
} else { // } else {
Mail::send( Mail::send(
$email_queue['to_email'], $email_queue['to_email'],
$email_queue['subject'], $email_queue['subject'],
$email_queue['template'], $email_queue['template'],
json_decode($email_queue['array']) json_decode($email_queue['array'])
); );
} // }
} catch (Exception|ClientExceptionInterface $e) { } catch (Exception|ClientExceptionInterface $e) {
echo $e->getMessage(); echo $e->getMessage();
@ -482,6 +482,68 @@ final class Cron
echo Tools::toDateTime(time()) . ' 邮件队列处理完成' . PHP_EOL; 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;
}
}
// 激活订单 // 激活订单
/** /**