Fixed static and template email files for container
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from django.conf import settings
|
||||
from django.contrib.staticfiles import finders
|
||||
from django.contrib import messages
|
||||
from django.core.mail import EmailMultiAlternatives
|
||||
from django.core.mail import EmailMultiAlternatives, get_connection
|
||||
from django.http import HttpRequest
|
||||
from django.db.models.query import QuerySet
|
||||
from django.utils.safestring import SafeText
|
||||
@@ -11,24 +11,27 @@ from ..models.students import Student
|
||||
from smtplib import SMTPException
|
||||
from email.mime.image import MIMEImage
|
||||
|
||||
import os
|
||||
from typing import List
|
||||
|
||||
def send_mail_password(request: HttpRequest, queryset: QuerySet[Student]) -> None:
|
||||
img: MIMEImage | None = None
|
||||
try:
|
||||
for d in settings.STATICFILES_DIRS:
|
||||
filename = os.path.join(d, "cantorair.png")
|
||||
if not os.path.exists(filename):
|
||||
continue
|
||||
with open(filename, "rb") as f:
|
||||
img = MIMEImage(f.read())
|
||||
img.add_header("Content-ID", "logo_image")
|
||||
img.add_header("Content-Disposition", "inline", filename="cantorair.png")
|
||||
break
|
||||
except:
|
||||
filename: str
|
||||
candidates = finders.find("cantorair.png")
|
||||
if not candidates:
|
||||
messages.error(request=request, message="Cannot Load CantorAir Logo")
|
||||
return
|
||||
elif isinstance(candidates, list):
|
||||
filename = candidates.pop()
|
||||
else:
|
||||
filename = candidates
|
||||
|
||||
with open(filename, "rb") as f:
|
||||
img = MIMEImage(f.read())
|
||||
img.add_header("Content-ID", "logo_image")
|
||||
img.add_header("Content-Disposition", "inline", filename="cantorair.png")
|
||||
|
||||
# build mail list filling template
|
||||
mails: List[EmailMultiAlternatives] = []
|
||||
for student in queryset:
|
||||
if not student.user or not student.email: # skip student if has not an associated user
|
||||
continue
|
||||
@@ -52,11 +55,19 @@ def send_mail_password(request: HttpRequest, queryset: QuerySet[Student]) -> Non
|
||||
)
|
||||
mail.attach(filename=img)
|
||||
mail.attach_alternative(content=html_message, mimetype="text/html")
|
||||
mail.send()
|
||||
except SMTPException as e:
|
||||
messages.error(request=request, message=f"Send Mail error: {e.strerror}")
|
||||
mails.append(mail)
|
||||
except Exception as e:
|
||||
messages.error(request=request, message=f"General Error: {e}")
|
||||
else:
|
||||
messages.success(request=request, message=f"Email Sent To: {student.surname} {student.name[0].upper()}. -> {mail.to.pop()}")
|
||||
return
|
||||
|
||||
# Open only one conenction and send mass email
|
||||
try:
|
||||
with get_connection() as conn:
|
||||
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")
|
||||
|
||||
return
|
||||
Reference in New Issue
Block a user