src/cm/utils/mail.py
author Simon Descarpentries <sid@sopinspace.com>
Tue, 06 May 2014 13:52:01 +0200
changeset 651 9bbc657f6837
parent 76 f35d85b2c760
permissions -rw-r--r--
Replace DISABLE_TRACKING and TRACKING_HTML by a TRACKING_ID variable in configuration files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Simple extension of django's EmailMessage to store emails in db
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
"""
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
from cm.cm_settings import CM_EMAIL_SUBJECT_PREFIX
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
from cm.models import Email
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
from cm.utils.i18n import translate_to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
from django.conf import settings
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
from django.contrib.auth.models import User
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
from django.core.mail import EmailMessage as BaseEmailMessage
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
from django.template.loader import render_to_string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
LIST_SEP = ' '
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
class EmailMessage(BaseEmailMessage):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
            connection=None, attachments=None, headers=None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
        if CM_EMAIL_SUBJECT_PREFIX:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
            subject = CM_EMAIL_SUBJECT_PREFIX + subject
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
        BaseEmailMessage.__init__(self, subject, body, from_email, to, bcc, connection, attachments, headers)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
    def send(self, fail_silently=False):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
        # store in db
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        Email.objects.create(
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
                             from_email = self.from_email,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
                             to = LIST_SEP.join(self.to),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
                             bcc = LIST_SEP.join(self.bcc),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
                             body = self.body,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
                             subject = self.subject,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
                             message = self.message().as_string() 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
                             )
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        # then send for real
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        BaseEmailMessage.send(self,fail_silently)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
def send_mail(subject, message, from_email, recipient_list,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
              fail_silently=False, auth_user=None, auth_password=None):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
    Easy wrapper for django replacing of send_mail in django.core.mail
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
    # Email subject *must not* contain newlines
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
    subject = ''.join(subject.splitlines())
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
    msg = EmailMessage(subject=subject, body=message, from_email=from_email, to = recipient_list)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
    msg.send(fail_silently)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
def send_mail_in_language(subject, subject_vars, message_template, message_vars, from_email, recipient_list):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
    If obj in recipient_list is user: used preferred_language in profile to send the email
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
    """
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
    for user_recipient in recipient_list:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        if type(user_recipient) == User:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
            lang_code = User.get_profile().preferred_language
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
            recipient = User.email
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
            lang_code = settings.LANGUAGE_CODE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
            recipient = user_recipient
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        processed_subject = translate_to(subject, lang_code) %subject_vars
76
f35d85b2c760 fix (not yet used) send_mail_in_language
raph
parents: 0
diff changeset
    58
        processed_message = translate_to(message_template, lang_code) %message_vars
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        send_mail(processed_subject, processed_message, from_email, recipient)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62