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)
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