from django.conf import settings from django.contrib import messages from django.core.mail import EmailMultiAlternatives from django.http import HttpRequest from django.db.models.query import QuerySet from django.utils.safestring import SafeText from django.template.loader import render_to_string from ..models.students import Student from smtplib import SMTPException from email.mime.image import MIMEImage import os 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: messages.error(request=request, message="Cannot Load CantorAir Logo") return for student in queryset: if not student.user or not student.email: # skip student if has not an associated user continue try: username: str = student.user.username password: str = student.default_password() address: str = student.email text_message: str = f"Cantor Air Flight Scheduler\nUsername:{username}\nPassword:{password}\n" html_message: SafeText = render_to_string( template_name="email/mail.html", context={"username": username, "password": password} ) mail: EmailMultiAlternatives = EmailMultiAlternatives( subject="CantorAir Flight Scheduler 🛫", from_email="ema.trabattoni@gmail.com", body=text_message, to = [ address ] ) 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}") 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