mail.py 1.7 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 misago.cache.versions import get_cache_versions
  5. from misago.conf import settings
  6. from misago.conf.dynamicsettings import DynamicSettings
  7. from .utils import get_host_from_address
  8. def build_mail(recipient, subject, template, sender=None, context=None):
  9. context = context.copy() if context else {}
  10. context.update({
  11. 'SITE_ADDRESS': settings.MISAGO_ADDRESS,
  12. 'SITE_HOST': get_host_from_address(settings.MISAGO_ADDRESS),
  13. 'LANGUAGE_CODE': get_language()[:2],
  14. 'LOGIN_URL': settings.LOGIN_URL,
  15. 'user': recipient,
  16. 'sender': sender,
  17. 'subject': subject,
  18. })
  19. if 'settings' not in context:
  20. cache_versions = get_cache_versions()
  21. context["settings"] = DynamicSettings(cache_versions)
  22. message_plain = render_to_string('%s.txt' % template, context)
  23. message_html = render_to_string('%s.html' % template, context)
  24. message = djmail.EmailMultiAlternatives(subject, message_plain, to=[recipient.email])
  25. message.attach_alternative(message_html, "text/html")
  26. return message
  27. def mail_user(recipient, subject, template, sender=None, context=None):
  28. message = build_mail(recipient, subject, template, sender, context)
  29. message.send()
  30. def mail_users(recipients, subject, template, sender=None, context=None):
  31. messages = []
  32. for recipient in recipients:
  33. messages.append(build_mail(recipient, subject, template, sender, context))
  34. if messages:
  35. send_messages(messages)
  36. def send_messages(messages):
  37. connection = djmail.get_connection()
  38. connection.send_messages(messages)