email.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.conf import settings
  2. from django.contrib.auth import get_user_model
  3. from django.core.mail import EmailMultiAlternatives
  4. from django.template.loader import render_to_string
  5. def send_email_notification(notification):
  6. single_template_html = "issue-drip.html"
  7. multiple_template_html = "multiple-issues-drip.html"
  8. subject = "GlitchTip"
  9. issue_count = notification.issues.count()
  10. first_issue = notification.issues.all().first()
  11. if issue_count == 1:
  12. subject = f"Error in {first_issue.project}: {first_issue.title}"
  13. elif issue_count > 1:
  14. subject = f"{issue_count} errors reported in {first_issue.project}"
  15. base_url = settings.GLITCHTIP_DOMAIN.geturl()
  16. org_slug = first_issue.project.organization.slug
  17. text_content = f"Errors reported in {first_issue.project}:\n\n"
  18. for issue in notification.issues.all():
  19. text_content += f"{issue.title}\n"
  20. text_content += f"{base_url}/organizations/{org_slug}/issues/{issue.id}\n\n"
  21. settings_link = (
  22. f"{base_url}/settings/{org_slug}/projects/{first_issue.project.slug}"
  23. )
  24. if issue_count == 1:
  25. issue_link = f"{base_url}/organizations/{org_slug}/issues/{first_issue.id}"
  26. html_content = render_to_string(
  27. single_template_html,
  28. {
  29. "issue_title": first_issue.title,
  30. "project_name": first_issue.project,
  31. "base_url": base_url,
  32. "issue_link": issue_link,
  33. "project_notification_settings_link": settings_link,
  34. },
  35. )
  36. elif issue_count > 1:
  37. project_link = f"{base_url}/organizations/{org_slug}/issues?project={first_issue.project.id}"
  38. html_content = render_to_string(
  39. multiple_template_html,
  40. {
  41. "org_slug": org_slug,
  42. "project_notification_settings_link": settings_link,
  43. "issues": notification.issues.all(),
  44. "project_name": first_issue.project,
  45. "project_link": project_link,
  46. },
  47. )
  48. User = get_user_model()
  49. users = User.objects.filter(
  50. organizations_ext_organization__projects__notification=notification
  51. )
  52. to = users.values_list("email", flat=True)
  53. msg = EmailMultiAlternatives(subject, text_content, to=to)
  54. msg.attach_alternative(html_content, "text/html")
  55. msg.send()