added email_sent field to student model, do not send mail twice if not needed
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user