added email_sent field to student model, do not send mail twice if not needed

This commit is contained in:
2025-12-10 11:43:04 +01:00
parent 99d24583d6
commit da8c8db0d2
4 changed files with 41 additions and 3 deletions

View File

@@ -31,6 +31,7 @@ def send_mail_password(request: HttpRequest, queryset: QuerySet[Student]) -> Non
img.add_header("Content-Disposition", "inline", filename="cantorair.png")
# build mail list filling template
queryset = queryset.filter(mail_sent=False)
mails: List[EmailMultiAlternatives] = []
for student in queryset:
if not student.user or not student.email: # skip student if has not an associated user
@@ -56,18 +57,25 @@ def send_mail_password(request: HttpRequest, queryset: QuerySet[Student]) -> Non
mail.attach(filename=img)
mail.attach_alternative(content=html_message, mimetype="text/html")
mails.append(mail)
student.mail_sent = True
student.save()
except Exception as e:
messages.error(request=request, message=f"General Error: {e}")
if len(mails) == 0:
messages.warning(request=request, message="No email will be sent")
return
# Open only one conenction and send mass email
try:
sent: int = 0
with get_connection() as conn:
conn.send_messages(mails)
sent = conn.send_messages(mails)
except SMTPException as e:
messages.error(request=request, message=f"Send Mail SMTP error: {e.strerror}")
except Exception as e:
messages.error(request=request, message=f"Send Mail General error: {e}")
else:
messages.success(request=request, message=f"Successfully sent {len(mails)} messages")
messages.success(request=request, message=f"Successfully sent {sent} messages")
return