11from functools import singledispatch
2- from typing import Dict , List , Union , Annotated
2+ from typing import Dict , List , Union , Annotated , Callable
33
44from procollab import settings
55from .constants import MAILING_USERS_BATCH_SIZE
@@ -137,6 +137,7 @@ def send_mass_mail_from_template(
137137 dict ,
138138 ] = None ,
139139 context_builder = None ,
140+ status_callback : Callable [[User , EmailMultiAlternatives ], None ] | None = None ,
140141 connection = None ,
141142) -> Annotated [int , "Количество отосланных сообщений" ]:
142143 """
@@ -147,7 +148,7 @@ def send_mass_mail_from_template(
147148 template_context = {}
148149
149150 template = get_template (template_name )
150- messages = []
151+ message_pairs : list [ tuple [ User , EmailMultiAlternatives ]] = []
151152 for user in users :
152153 context = dict (template_context )
153154 if context_builder is not None :
@@ -159,10 +160,14 @@ def send_mass_mail_from_template(
159160 subject , plain_msg , settings .EMAIL_USER , [user .email ]
160161 )
161162 msg .attach_alternative (html_msg , "text/html" )
162- messages .append (msg )
163+ message_pairs .append (( user , msg ) )
163164
164- grouped_messages = create_message_groups (messages )
165+ grouped_messages = create_message_groups (message_pairs )
165166 num_sent : int = 0
166167 for group in grouped_messages :
167- num_sent += send_group_messages (group )
168+ messages = [msg for _ , msg in group ]
169+ num_sent += send_group_messages (messages )
170+ if status_callback is not None :
171+ for user , msg in group :
172+ status_callback (user , msg )
168173 return num_sent
0 commit comments