From 65ac5ae18e448fbcb6ccebbcb4c2bf7454395656 Mon Sep 17 00:00:00 2001 From: Patrick Mayr Date: Thu, 30 Oct 2025 15:05:36 +0100 Subject: [PATCH] fix: sending mail; add email host user and pwd for authentication --- Readme.md | 2 + docker-compose.yml | 6 +- fet2020/fet2020/settings.py | 4 ++ fet2020/rental/mails.py | 106 ++++++++++++++++++------------------ 4 files changed, 63 insertions(+), 55 deletions(-) diff --git a/Readme.md b/Readme.md index 5d9f6bd2..028f75f6 100644 --- a/Readme.md +++ b/Readme.md @@ -96,6 +96,8 @@ docker build -t django-nginx-image -f nginx/Dockerfile ./nginx ### Start docker container +Add email password for 'Verleih' account to EMAIL_HOST_PASSWORD in the docker compose file! + Build the docker containers: ```bash diff --git a/docker-compose.yml b/docker-compose.yml index a43ca451..76797720 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,7 @@ services: depends_on: - django-homepage volumes: - - files-volume:/usr/src/app/files + - files-volume:/usr/src/app/files - ./gallery:/usr/src/app/files/uploads/gallery - ./assets:/usr/src/app/assets:ro networks: @@ -24,7 +24,9 @@ services: SECRET_KEY: "sae34sADfrFr89E!Gl#f!34hdjGR#!jopi4qFEr#4R56rT56zT2#wE1!feGp" MYSQL_USER: "user" MYSQL_PASSWORD: "hgu" - ETHERPAD_GROUP: "g.snlbqn7S6ksRbom3" + ETHERPAD_GROUP: "g.snlbqn7S6ksRbom3" + EMAIL_HOST_USER: "verleih@fet.at" + EMAIL_HOST_PASSWORD: "" depends_on: mysql: condition: service_healthy diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index 68add289..7b564f73 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -18,6 +18,8 @@ env = environ.Env( ETHERPAD_GROUP=(str, ""), GALLERY_PATH=(str, "uploads/gallery"), MC_MASTERPASSWORD=(str, ""), + EMAIL_HOST_USER=(str, ""), + EMAIL_HOST_PASSWORD=(str, ""), ) # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -103,6 +105,8 @@ else: EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "buran.htu.tuwien.ac.at" EMAIL_PORT = 587 +EMAIL_HOST_USER = env("EMAIL_HOST_USER") +EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD") EMAIL_USE_TLS = True diff --git a/fet2020/rental/mails.py b/fet2020/rental/mails.py index 967ac989..47c0f3eb 100644 --- a/fet2020/rental/mails.py +++ b/fet2020/rental/mails.py @@ -1,53 +1,53 @@ -import logging - -from django.core.mail import EmailMessage - -RENTAL_EMAIL = "verleih@fet.at" -logger = logging.getLogger(__name__) - - -def send_mail_approved(obj): - subject = f"FET-Verleih #{obj.id}: {obj.get_status_display()}" - - total_deposit = 0 - for rentalitem in obj.rentalitems.all(): - total_deposit += rentalitem.deposit - - message = ( - f"Hallo {obj.firstname},\n" - f"deine Verleihanfrage mit der Nummer #{obj.id} wurde erfolgreich genehmigt. Die " - f"Gegenstände können am {obj.date_start.strftime('%d.%m.%Y')} während der Beratungszeit " - "(Montag - Donnerstag: 09:00 - 14:00, Freitag: 09:00 - 12:00) abgeholt werden. Bitte bring " - f"den Gesamtpfand in Höhe von {total_deposit} € in bar mit.\n" - "Liebe Grüße,\n" - "das Verleih-Team" - ) - - email = EmailMessage( - subject, message, from_email=RENTAL_EMAIL, to=[obj.email], cc=[RENTAL_EMAIL] - ) - - try: - email.send() - except Exception as exc: - logger.error("Failed to send approval email for rental #%s. Error: %s", obj.id, exc) - - -def send_mail_rejected(obj): - subject = f"FET-Verleih #{obj.id}: {obj.get_status_display()}" - - message = ( - f"Hallo {obj.firstname},\n" - f"deine Verleihanfrage mit der Nummer #{obj.id} wurde abgelehnt.\n" - "Liebe Grüße,\n" - "das Verleih-Team" - ) - - email = EmailMessage( - subject, message, from_email=RENTAL_EMAIL, to=[obj.email], cc=[RENTAL_EMAIL] - ) - - try: - email.send() - except Exception as exc: - logger.error("Failed to send rejection email for rental #%s. Error: %s", obj.id, exc) +import logging + +from django.conf import settings +from django.core.mail import EmailMessage + +RENTAL_EMAIL = settings.EMAIL_HOST_USER +logger = logging.getLogger(__name__) + + +def send_mail_approved(obj): + subject = f"FET-Verleih #{obj.id}: {obj.get_status_display()}" + total_deposit = obj.calc_total_deposit() + + message = ( + f"Hallo {obj.firstname},\n\n" + f"deine Verleihanfrage mit der Nummer #{obj.id} wurde erfolgreich genehmigt. Die " + f"Gegenstände können am {obj.date_start.strftime('%d.%m.%Y')} während der Beratungszeit " + "(Montag - Donnerstag: 09:00 - 14:00, Freitag: 09:00 - 12:00) abgeholt werden.\n" + ) + + if total_deposit > 0: + message += f"Bitte bring den Gesamtpfand in Höhe von {total_deposit} € in bar mit.\n" + + message += "\nLiebe Grüße,\ndas Verleih-Team" + + email = EmailMessage( + subject, message, from_email=RENTAL_EMAIL, to=[obj.email], cc=[RENTAL_EMAIL] + ) + + try: + email.send() + except Exception as exc: + logger.info("Failed to send approval email for rental #%s. Error: %s", obj.id, exc) + + +def send_mail_rejected(obj): + subject = f"FET-Verleih #{obj.id}: {obj.get_status_display()}" + + message = ( + f"Hallo {obj.firstname},\n\n" + f"deine Verleihanfrage mit der Nummer #{obj.id} wurde abgelehnt.\n\n" + "Liebe Grüße,\n" + "das Verleih-Team" + ) + + email = EmailMessage( + subject, message, from_email=RENTAL_EMAIL, to=[obj.email], cc=[RENTAL_EMAIL] + ) + + try: + email.send() + except Exception as exc: + logger.info("Failed to send rejection email for rental #%s. Error: %s", obj.id, exc)