first version of send mail with dummy backend and confirm action

This commit is contained in:
2025-12-06 18:52:03 +01:00
parent 7c7d0e1e62
commit 42417927c9
10 changed files with 525 additions and 8 deletions

View File

@@ -0,0 +1,62 @@
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