Beispiel #1
0
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)
Beispiel #3
0
    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(), ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'])
Beispiel #4
0
    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(), [
            '*****@*****.**', '*****@*****.**'])
Beispiel #6
0
 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(), [
         '*****@*****.**', '*****@*****.**', '*****@*****.**',
         '*****@*****.**', '*****@*****.**'
     ])
Beispiel #7
0
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
Beispiel #8
0
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 
Beispiel #9
0
    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')
Beispiel #10
0
    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')
Beispiel #11
0
 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(), ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**'])