src/cm/utils/mail.py
changeset 0 40c8f766c9b8
child 76 f35d85b2c760
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     1 """
       
     2 Simple extension of django's EmailMessage to store emails in db
       
     3 """
       
     4 from cm.cm_settings import CM_EMAIL_SUBJECT_PREFIX
       
     5 from cm.models import Email
       
     6 from cm.utils.i18n import translate_to
       
     7 from django.conf import settings
       
     8 from django.contrib.auth.models import User
       
     9 from django.core.mail import EmailMessage as BaseEmailMessage
       
    10 from django.template.loader import render_to_string
       
    11 LIST_SEP = ' '
       
    12 
       
    13 class EmailMessage(BaseEmailMessage):
       
    14     
       
    15     def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
       
    16             connection=None, attachments=None, headers=None):
       
    17         if CM_EMAIL_SUBJECT_PREFIX:
       
    18             subject = CM_EMAIL_SUBJECT_PREFIX + subject
       
    19         BaseEmailMessage.__init__(self, subject, body, from_email, to, bcc, connection, attachments, headers)
       
    20     
       
    21     def send(self, fail_silently=False):
       
    22         # store in db
       
    23         Email.objects.create(
       
    24                              from_email = self.from_email,
       
    25                              to = LIST_SEP.join(self.to),
       
    26                              bcc = LIST_SEP.join(self.bcc),
       
    27                              body = self.body,
       
    28                              subject = self.subject,
       
    29                              message = self.message().as_string() 
       
    30                              )
       
    31         # then send for real
       
    32         BaseEmailMessage.send(self,fail_silently)
       
    33      
       
    34 def send_mail(subject, message, from_email, recipient_list,
       
    35               fail_silently=False, auth_user=None, auth_password=None):
       
    36     """
       
    37     Easy wrapper for django replacing of send_mail in django.core.mail
       
    38     """
       
    39     # Email subject *must not* contain newlines
       
    40     subject = ''.join(subject.splitlines())
       
    41     
       
    42     msg = EmailMessage(subject=subject, body=message, from_email=from_email, to = recipient_list)
       
    43     msg.send(fail_silently)
       
    44      
       
    45 def send_mail_in_language(subject, subject_vars, message_template, message_vars, from_email, recipient_list):
       
    46     """
       
    47     If obj in recipient_list is user: used preferred_language in profile to send the email
       
    48     """
       
    49     import pdb;pdb.set_trace()
       
    50     for user_recipient in recipient_list:
       
    51         if type(user_recipient) == User:
       
    52             lang_code = User.get_profile().preferred_language
       
    53             recipient = User.email
       
    54         else:
       
    55             lang_code = settings.LANGUAGE_CODE
       
    56             recipient = user_recipient
       
    57             
       
    58         processed_subject = translate_to(subject, lang_code) %subject_vars
       
    59         processed_message = translate_to(message, lang_code) %message_vars
       
    60         
       
    61         send_mail(processed_subject, processed_message, from_email, recipient)
       
    62         
       
    63