Skip to content

Commit 2068442

Browse files
committed
Добавлено логирование id задач по отправки писем
1 parent 4d394c1 commit 2068442

2 files changed

Lines changed: 29 additions & 5 deletions

File tree

mailing/tasks.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,31 @@ def _send_scenario_for_program(scenario, program, scheduled_for):
8484
def context_builder(user):
8585
return scenario.context_builder(program, user, deadline_date)
8686

87+
def status_callback(user, msg):
88+
status = getattr(msg, "anymail_status", None)
89+
message_id = getattr(status, "message_id", None) if status else None
90+
if message_id:
91+
logger.info(
92+
"Scenario %s user=%s anymail_id=%s status=%s",
93+
scenario.code,
94+
user.id,
95+
message_id,
96+
getattr(status, "status", None),
97+
)
98+
else:
99+
logger.info(
100+
"Scenario %s user=%s anymail_status missing",
101+
scenario.code,
102+
user.id,
103+
)
104+
87105
try:
88106
send_mass_mail_from_template(
89107
recipients_to_send,
90108
scenario.subject,
91109
scenario.template_name,
92110
context_builder=context_builder,
111+
status_callback=status_callback,
93112
)
94113
except Exception as exc:
95114
MailingScenarioLog.objects.filter(

mailing/utils.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from functools import singledispatch
2-
from typing import Dict, List, Union, Annotated
2+
from typing import Dict, List, Union, Annotated, Callable
33

44
from procollab import settings
55
from .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

Comments
 (0)