feat: SMTP配额自动重置(北京时间凌晨0点)
- 添加reset_smtp_daily_quota函数主动重置配额 - 添加定时任务在北京时间00:00自动重置SMTP配额 - 保留被动重置作为备份机制 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
5
app.py
5
app.py
@@ -4017,10 +4017,15 @@ def scheduled_task_worker():
|
|||||||
# 每小时清理过期验证码
|
# 每小时清理过期验证码
|
||||||
schedule.every().hour.do(cleanup_expired_captcha)
|
schedule.every().hour.do(cleanup_expired_captcha)
|
||||||
|
|
||||||
|
# 每天北京时间0点重置SMTP配额
|
||||||
|
quota_reset_utc_time = cst_to_utc_time("00:00")
|
||||||
|
schedule.every().day.at(quota_reset_utc_time).do(email_service.reset_smtp_daily_quota)
|
||||||
|
|
||||||
# 只在首次运行时打印基础任务日志
|
# 只在首次运行时打印基础任务日志
|
||||||
if is_first_run:
|
if is_first_run:
|
||||||
print(f"[定时任务] 已设置数据清理任务: 每天 CST 03:00 (UTC {cleanup_utc_time})")
|
print(f"[定时任务] 已设置数据清理任务: 每天 CST 03:00 (UTC {cleanup_utc_time})")
|
||||||
print(f"[定时任务] 已设置验证码清理任务: 每小时执行一次")
|
print(f"[定时任务] 已设置验证码清理任务: 每小时执行一次")
|
||||||
|
print(f"[定时任务] 已设置SMTP配额重置: 每天 CST 00:00 (UTC {quota_reset_utc_time})")
|
||||||
|
|
||||||
# 如果启用了定时浏览任务,则添加
|
# 如果启用了定时浏览任务,则添加
|
||||||
if config.get('schedule_enabled'):
|
if config.get('schedule_enabled'):
|
||||||
|
|||||||
@@ -933,6 +933,23 @@ def _update_email_stats(email_type: str, success: bool):
|
|||||||
conn.commit()
|
conn.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def reset_smtp_daily_quota():
|
||||||
|
"""重置所有SMTP配置的每日发送计数(北京时间凌晨0点调用)"""
|
||||||
|
today = get_beijing_today()
|
||||||
|
with db_pool.get_db() as conn:
|
||||||
|
cursor = conn.cursor()
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE smtp_configs
|
||||||
|
SET daily_sent = 0, daily_reset_date = ?
|
||||||
|
WHERE daily_reset_date != ? OR daily_reset_date IS NULL OR daily_reset_date = ''
|
||||||
|
""", (today, today))
|
||||||
|
updated = cursor.rowcount
|
||||||
|
conn.commit()
|
||||||
|
if updated > 0:
|
||||||
|
print(f"[邮件服务] 已重置 {updated} 个SMTP配置的每日配额")
|
||||||
|
return updated
|
||||||
|
|
||||||
|
|
||||||
def get_email_stats() -> Dict[str, Any]:
|
def get_email_stats() -> Dict[str, Any]:
|
||||||
"""获取邮件统计"""
|
"""获取邮件统计"""
|
||||||
with db_pool.get_db() as conn:
|
with db_pool.get_db() as conn:
|
||||||
|
|||||||
Reference in New Issue
Block a user