diff --git a/generic/models.py b/generic/models.py index 9e73efb5..34a2b9e7 100644 --- a/generic/models.py +++ b/generic/models.py @@ -1,4 +1,6 @@ from django.db import models +from django.http import request +from smtplib import SMTPException from django.urls import reverse @@ -222,6 +224,8 @@ class CidUser(models.Model): email = models.EmailField(blank=True) supervisor_email = models.EmailField(blank=True) + login_email_sent = models.BooleanField(default=False) + group = models.ForeignKey("CidUserGroup", on_delete=models.SET_NULL, null=True) def __str__(self) -> str: @@ -230,9 +234,11 @@ class CidUser(models.Model): def check_passcode(self, passcode) -> bool: return self.passcode == passcode - def email_details(self): + def email_details(self, resend=False): + if self.login_email_sent and not self.resend: + return False, "Already sent." - login_url = reverse("cid_selector") + login_url = request.build_absolute_uri(reverse("cid_selector")) msg = f""" See below for you details for: {self.group} @@ -252,7 +258,14 @@ class CidUser(models.Model): Please note this inbox is not monitored. Direct all enquiries to ... """ - send_mail("Candidate Details", msg, "test@xkjq.uk", [self.email]) + try: + send_mail("Candidate Details", msg, "test@xkjq.uk", [self.email], fail_silently=False) + except SMTPException as e: + return False, e + + self.login_email_sent = True + self.save() + return True, "" class CidUserExam(models.Model): content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) diff --git a/generic/templates/generic/group_emailed.html b/generic/templates/generic/group_emailed.html index 37df6a09..9457725f 100755 --- a/generic/templates/generic/group_emailed.html +++ b/generic/templates/generic/group_emailed.html @@ -2,8 +2,8 @@ {% block content %} -The following users have been emailed: -{% for u in users %} -
{{u.cid}}: {{u.email}}
-{% endfor %} -{% endblock %} \ No newline at end of file + Emails sent as below: + {% for u, success, msg in users %} +{{u.cid}}: {{u.email}} [success={{success}}] ({{msg}})
+ {% endfor %} +{% endblock %} diff --git a/generic/views.py b/generic/views.py index ac8d1409..5d6bb289 100644 --- a/generic/views.py +++ b/generic/views.py @@ -1030,13 +1030,15 @@ def group_email(request, pk): users = group.ciduser_set.all() + results = [] for u in users: - u.email_details() + success, msg = u.email_details() + results.append((u, success, msg)) return render( request, "generic/group_emailed.html", - {"users": users}, + {"results": results}, )