From 5e905519bf09a713da3e34541694a2c8f3b844bd Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 21 May 2024 14:46:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=82=AE=E4=BB=B6=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E9=A2=91=E7=8E=87=E8=BF=87=E9=AB=98=E8=87=AA=E5=8A=A8=E5=B1=8F?= =?UTF-8?q?=E8=94=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/tasks.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/utils/tasks.py b/apps/utils/tasks.py index 7dc6f2c9..3c69e88d 100644 --- a/apps/utils/tasks.py +++ b/apps/utils/tasks.py @@ -5,21 +5,39 @@ import logging from django.conf import settings from server.settings import get_sysconfig import importlib +import hashlib +from django.core.cache import cache # 实例化myLogger myLogger = logging.getLogger('log') +def generate_cache_key(subject): + # 使用邮件主题生成一个唯一的缓存键 + hash_subject = hashlib.md5(subject.encode()).hexdigest() + return f"error_email_{hash_subject}" @shared_task def send_mail_task(**args): config = get_sysconfig() - from django.core.mail import send_mail args['subject'] = '{}:{}_{}_{}'.format( settings.SYS_NAME, settings.SYS_VERSION, config['base']['base_name_short'], args.get('subject', '500')) args['from_email'] = args.get('from_email', settings.EMAIL_HOST_USER) args['recipient_list'] = args.get( 'recipient_list', [settings.EMAIL_HOST_USER]) - send_mail(**args) + cache_key = generate_cache_key(args['subject']) + email_tuple = cache.get(cache_key) + if email_tuple is None: + email_tuple = (0, True) + cache.set(cache_key, email_tuple, 60) + email_count, email_enable = email_tuple + if email_enable: + email_count += 1 + if email_count > 4: + email_enable = False + # 如果频率高于每分钟4封,则自动屏蔽半小时 + cache.set(cache_key, (email_count, email_enable), 1800) + from django.core.mail import send_mail + send_mail(**args) class CustomTask(Task): """