mail.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from django.core import mail as djmail
  2. from django.template.loader import render_to_string
  3. from django.utils.translation import get_language
  4. from ..conf import settings
  5. from .utils import get_host_from_address
  6. def build_mail(recipient, subject, template, sender=None, context=None):
  7. context = context.copy() if context else {}
  8. if not context.get("settings"):
  9. raise ValueError("settings key is missing from context")
  10. forum_address = context["settings"].forum_address
  11. context.update(
  12. {
  13. "LANGUAGE_CODE": get_language()[:2],
  14. "LOGIN_URL": settings.LOGIN_URL,
  15. "forum_host": get_host_from_address(forum_address),
  16. "user": recipient,
  17. "sender": sender,
  18. "subject": subject,
  19. }
  20. )
  21. message_plain = render_to_string("%s.txt" % template, context)
  22. message_html = render_to_string("%s.html" % template, context)
  23. message = djmail.EmailMultiAlternatives(
  24. subject, message_plain, to=[recipient.email]
  25. )
  26. message.attach_alternative(message_html, "text/html")
  27. return message
  28. def mail_user(recipient, subject, template, sender=None, context=None):
  29. message = build_mail(recipient, subject, template, sender, context)
  30. message.send()
  31. def mail_users(recipients, subject, template, sender=None, context=None):
  32. messages = []
  33. for recipient in recipients:
  34. messages.append(build_mail(recipient, subject, template, sender, context))
  35. if messages:
  36. send_messages(messages)
  37. def send_messages(messages):
  38. connection = djmail.get_connection()
  39. connection.send_messages(messages)