Ejemplo n.º 1
0
    def save(self):            
        new_message = Message()
        new_message.subject = self.subject
        new_message.hash_value = self.hash_value
        new_message.uid = self.uid
        new_message.sender = self.get_sender(self.sender)
        
        store_email = EmailMultiAlternatives(new_message.subject, 
                                   self.body_plain, 
                                   self.sender[1], 
                                   [r[1] for r in self.recipients])
        
        if self.body_html:
            store_email.attach_alternative(self.body_html, "text/html")
        new_message.email = store_email
        new_message.save()        
        new_message.recipients = self.get_recipients(self.recipients)
        new_message.created = self.received
        new_message.sent = True
        new_message.save()

        get_or_create_contact(self.sender).emails_sent.add(new_message)
        for rec in self.recipients:
            get_or_create_contact(rec).emails_received.add(new_message)
Ejemplo n.º 2
0
def send_multi_mail(subject, content, recipient_list,
                    from_email=from_email,
                    names_dict=None,
                    ignore_celery=False):
    def _add_name_dict(user):
        if not names_dict.get(user.email, None):
            names_dict[user.email] = user.get_full_name()

    if names_dict is None:
        names_dict = {}

    if not isinstance(recipient_list, list):
        recipient_list = [recipient_list]

    if len(recipient_list) == 0:
        return 0

    recipient_list = list(set(recipient_list))

    msg = Message()
    msg.subject = smart_str(subject)
    msg.save()
    for u in User.objects.filter(email=from_email):
        msg.sender = u
        _add_name_dict(u)

    recipient_list_str = []

    for recipient in recipient_list:
        if isinstance(recipient, User):
            msg.recipients.add(recipient)
            _add_name_dict(recipient)

            recipient_list_str.append(recipient.email)
        else:
            for u in User.objects.filter(email=recipient):
                _add_name_dict(u)
                msg.recipients.add(u)
            recipient_list_str.append(recipient)

    h = HTML2Text()
    h.ignore_images = True
    h.ignore_emphasis = True

    recipient_list_str = list(set(recipient_list_str))

    args = [smart_str(subject),
            smart_str(h.handle(force_unicode(strip_empty_tags(strip_tags(content, ['img', 'script', 'span']))))),
            from_email
    ]
    kwargs = {}
    if len(recipient_list_str) > 1:
        kwargs['to'] = [from_email]
        kwargs['bcc'] = recipient_list_str
    else:
        kwargs['to'] = recipient_list_str

    email = EmailMultiAlternatives(*args, **kwargs)
    email.attach_alternative(content, "text/html")

    msg.email = email
    msg.save()
    get_or_create_contact((names_dict.get(from_email), from_email)).emails_sent.add(msg)
    for rec in recipient_list_str:
        get_or_create_contact((names_dict.get(rec), rec)).emails_received.add(msg)

    send(msg, ignore_celery)

    return 1