Browse Source

Mailer API implemented #321

Rafał Pitoń 11 years ago
parent
commit
07b4c706f2
2 changed files with 41 additions and 6 deletions
  1. 5 0
      misago/conf/defaults.py
  2. 36 6
      misago/core/mail.py

+ 5 - 0
misago/conf/defaults.py

@@ -92,3 +92,8 @@ USE_L10N = True
 USE_TZ = True
 USE_TZ = True
 
 
 TIME_ZONE = 'UTC'
 TIME_ZONE = 'UTC'
+
+
+# Misago Mailer
+
+MISAGO_MAILER_BATCH_SIZE = 30

+ 36 - 6
misago/core/mail.py

@@ -1,13 +1,43 @@
+from django.conf import settings
 from django.core import mail as djmail
 from django.core import mail as djmail
+from django.template import RequestContext
+from django.template.loader import render_to_string
 
 
 
 
-def send_mail():
-    pass
+def _build_mail(request, recipient, subject, template, context=None):
+    context = context or {}
+    context['sender'] = request.user
+    context['recipient'] = recipient
+    context = RequestContext(request, context)
 
 
+    message_plain = render_to_string('%s.txt' % template, context)
+    message_html = render_to_string('%s.html' % template, context)
 
 
-def send_mass_mail():
-    pass
+    message = djmail.EmailMultiAlternatives(subject, message_plain,
+                                            to=[recipient.email])
+    message.attach_alternative(message_html, "text/html")
 
 
+    return message
 
 
-def mail_user():
-    pass
+
+def mail_user(request, recipient, subject, template, context=None):
+    message = _build_mail(request, recipient, subject, template, context)
+    message.send()
+
+
+def mail_users(request, recipients, subject, template, context=None, batch=None):
+    batch = batch or settings.MISAGO_MAILER_BATCH_SIZE
+    messages = []
+
+    for recipient in recipients:
+        messages.append(
+            _build_mail(request, recipient, subject, template, context))
+
+        if batch and len(messages) >= batch:
+            connection = djmail.get_connection()
+            connection.send_messages(messages)
+            messages = []
+
+    if messages:
+        connection = djmail.get_connection()
+        connection.send_messages(messages)