def send_mail(subject, content, from_email, to=None, bcc=None, cc=None, attachments=None, email_category: EmailCategory = EmailCategory.GENERAL, fail_silently=True) -> int: mail = EmailMessage(subject=subject, body=content, from_email=from_email, to=to, bcc=bcc, cc=cc, attachments=attachments) mail.content_subtype = "html" msg_sent = 0 if mail.recipients(): email_record = create_email_log(mail, email_category) try: msg_sent = mail.send() except: email_record.ok = False if not fail_silently: raise finally: email_record.save() return msg_sent
def create_message( self, message: EmailMessage, fail_silently: bool = False, fake_delivery: bool = False, ) -> List['SESMailDelivery']: assert isinstance(message, EmailMessage) assert message.connection is None or isinstance( message.connection, SESBackend) if settings.DEBUG and getattr(settings, 'SES_SNS_TRACKER_DEBUG_BACKEND', None): debug_backend = import_string( settings.SES_SNS_TRACKER_DEBUG_BACKEND) message.connection = debug_backend() elif message.connection is None: message.connection = SESBackend() if not fake_delivery: message.send(fail_silently=fail_silently) deliveries = list() for recipient in message.recipients(): deliveries.append( self.model( recipient=recipient, message_id=message.extra_headers.get( 'message_id', 'NO_MESSAGE_ID'), request_id=message.extra_headers.get( 'request_id', 'NO_RESULT_ID'), state=self.model.STATE_DELIVERED if fake_delivery else self.model.STATE_SENT, )) return self.bulk_create(deliveries)
def test_cc(self): """Regression test for #7722""" email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**'], cc=['*****@*****.**']) message = email.message() self.assertEqual(message['Cc'], '*****@*****.**') self.assertEqual(email.recipients(), ['*****@*****.**', '*****@*****.**']) # Test multiple CC with multiple To email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**'], cc=['*****@*****.**', '*****@*****.**']) message = email.message() self.assertEqual(message['Cc'], '[email protected], [email protected]') self.assertEqual(email.recipients(), ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']) # Testing with Bcc email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**'], cc=['*****@*****.**', '*****@*****.**'], bcc=['*****@*****.**']) message = email.message() self.assertEqual(message['Cc'], '[email protected], [email protected]') self.assertEqual(email.recipients(), ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'])
def test_message(self): allowed = [re.compile(r'^.*@dreamsolution.nl$')] # test valid address email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**']) email = filter_message(email, allowed) self.assertEqual(email.to, ['*****@*****.**']) # test invalid address email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**']) email = filter_message(email, allowed) self.assertEqual(email.to, []) # test one valid and one invalid 'To' address email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**']) email = filter_message(email, allowed) self.assertEqual(email.to, ['*****@*****.**']) # test multiple valid 'To' addresses email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**']) email = filter_message(email, allowed) self.assertEqual(email.to, ['*****@*****.**', '*****@*****.**']) # test 'Cc' email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**'], cc=['*****@*****.**']) email = filter_message(email, allowed) self.assertEqual(email.cc, ['*****@*****.**']) self.assertEqual(email.recipients(), ['*****@*****.**']) # test 'Bcc' email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**'], bcc=['*****@*****.**']) email = filter_message(email, allowed) self.assertEqual(email.bcc, ['*****@*****.**']) self.assertEqual(email.recipients(), [ '*****@*****.**', '*****@*****.**'])
def test_recipients_as_tuple(self): email = EmailMessage('Subject', 'Content', '*****@*****.**', ('*****@*****.**', '*****@*****.**'), cc=('*****@*****.**', '*****@*****.**'), bcc=('*****@*****.**', )) message = email.message() self.assertEqual(message['Cc'], '[email protected], [email protected]') self.assertEqual(email.recipients(), [ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**' ])
def create_email_log(email: EmailMessage, email_category: EmailCategory): from NEMO.models import EmailLog email_record: EmailLog = EmailLog.objects.create(category=email_category, sender=email.from_email, to=', '.join( email.recipients()), subject=email.subject, content=email.body) if email.attachments: email_attachments = [] for attachment in email.attachments: if isinstance(attachment, MIMEBase): email_attachments.append(attachment.get_filename() or '') if email_attachments: email_record.attachments = ', '.join(email_attachments) return email_record
def notify_tradesmen(category, html_message): notify = "" tradesmen_email_list = [ person.user.tradesman.email for person in CD.objects.filter(category = category, is_verified = True)] if tradesmen_email_list != []: subject = 'New job notification' content = html_message sender = '*****@*****.**' recipient_list = tradesmen_email_list headers = {} notify = EmailMessage(subject = subject, body = content, from_email = sender, bcc = recipient_list) notify.content_subtype = "html" # leaves main type as text/html notify.send(fail_silently = False) # print 'Recipients: ', notify.recipients() return notify.recipients() else: print 'No recipient selected' return
def test_lazy_addresses(self): """ Email sending should support lazy email addresses (#24416). """ _ = ugettext_lazy self.assertTrue(send_mail('Subject', 'Content', _('tester'), [_('django')])) message = self.get_the_message() self.assertEqual(message.get('from'), 'tester') self.assertEqual(message.get('to'), 'django') self.flush_mailbox() m = EmailMessage( 'Subject', 'Content', _('tester'), [_('to1'), _('to2')], cc=[_('cc1'), _('cc2')], bcc=[_('bcc')], reply_to=[_('reply')], ) self.assertEqual(m.recipients(), ['to1', 'to2', 'cc1', 'cc2', 'bcc']) m.send() message = self.get_the_message() self.assertEqual(message.get('from'), 'tester') self.assertEqual(message.get('to'), 'to1, to2') self.assertEqual(message.get('cc'), 'cc1, cc2') self.assertEqual(message.get('Reply-To'), 'reply')
def test_recipients_as_tuple(self): email = EmailMessage('Subject', 'Content', '*****@*****.**', ('*****@*****.**', '*****@*****.**'), cc=('*****@*****.**', '*****@*****.**'), bcc=('*****@*****.**',)) message = email.message() self.assertEqual(message['Cc'], '[email protected], [email protected]') self.assertEqual(email.recipients(), ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'])