src/cm/utils/mail.py
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 76 f35d85b2c760
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
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