src/cm/utils/mail.py
changeset 0 40c8f766c9b8
child 76 f35d85b2c760
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/utils/mail.py	Mon Nov 23 15:14:29 2009 +0100
@@ -0,0 +1,63 @@
+"""
+Simple extension of django's EmailMessage to store emails in db
+"""
+from cm.cm_settings import CM_EMAIL_SUBJECT_PREFIX
+from cm.models import Email
+from cm.utils.i18n import translate_to
+from django.conf import settings
+from django.contrib.auth.models import User
+from django.core.mail import EmailMessage as BaseEmailMessage
+from django.template.loader import render_to_string
+LIST_SEP = ' '
+
+class EmailMessage(BaseEmailMessage):
+    
+    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
+            connection=None, attachments=None, headers=None):
+        if CM_EMAIL_SUBJECT_PREFIX:
+            subject = CM_EMAIL_SUBJECT_PREFIX + subject
+        BaseEmailMessage.__init__(self, subject, body, from_email, to, bcc, connection, attachments, headers)
+    
+    def send(self, fail_silently=False):
+        # store in db
+        Email.objects.create(
+                             from_email = self.from_email,
+                             to = LIST_SEP.join(self.to),
+                             bcc = LIST_SEP.join(self.bcc),
+                             body = self.body,
+                             subject = self.subject,
+                             message = self.message().as_string() 
+                             )
+        # then send for real
+        BaseEmailMessage.send(self,fail_silently)
+     
+def send_mail(subject, message, from_email, recipient_list,
+              fail_silently=False, auth_user=None, auth_password=None):
+    """
+    Easy wrapper for django replacing of send_mail in django.core.mail
+    """
+    # Email subject *must not* contain newlines
+    subject = ''.join(subject.splitlines())
+    
+    msg = EmailMessage(subject=subject, body=message, from_email=from_email, to = recipient_list)
+    msg.send(fail_silently)
+     
+def send_mail_in_language(subject, subject_vars, message_template, message_vars, from_email, recipient_list):
+    """
+    If obj in recipient_list is user: used preferred_language in profile to send the email
+    """
+    import pdb;pdb.set_trace()
+    for user_recipient in recipient_list:
+        if type(user_recipient) == User:
+            lang_code = User.get_profile().preferred_language
+            recipient = User.email
+        else:
+            lang_code = settings.LANGUAGE_CODE
+            recipient = user_recipient
+            
+        processed_subject = translate_to(subject, lang_code) %subject_vars
+        processed_message = translate_to(message, lang_code) %message_vars
+        
+        send_mail(processed_subject, processed_message, from_email, recipient)
+        
+        
\ No newline at end of file