Esempio n. 1
0
def queue_email_message(email_message, fail_silently=False, priority=None):
    """
    Add new messages to the email queue.

    The ``email_message`` argument should be an instance of Django's core mail
    ``EmailMessage`` class.

    The messages can be assigned a priority in the queue by using the
    ``priority`` argument.

    The ``fail_silently`` argument is not used and is only provided to match
    the signature of the ``EmailMessage.send`` function which it may emulate
    (see ``queue_django_mail``).

    """
    from django_mailer import constants, models, settings

    if constants.PRIORITY_HEADER in email_message.extra_headers:
        priority = email_message.extra_headers.pop(constants.PRIORITY_HEADER)
        priority = constants.PRIORITIES.get(priority.lower())

    messages = (
        models.Message.objects.create(
            to_address=to_email,
            from_address=email_message.from_email,
            subject=email_message.subject,
            encoded_message=email_message.message().as_string(),
        )
        for to_email in email_message.recipients()
    )

    if priority == constants.PRIORITY_EMAIL_NOW:
        if constants.EMAIL_BACKEND_SUPPORT:
            from django.core.mail import get_connection
            from django_mailer.engine import send_message

            connection = get_connection(backend=settings.USE_BACKEND)
            result = send_message(email_message, smtp_connection=connection)

            log_message = ""

            if result != constants.RESULT_SENT:
                log_message = "Message send failure!"

            for message in messages:
                models.Log.objects.create(message=message, result=result, log_message=log_message)

            return result == constants.RESULT_SENT
        else:
            return email_message.send()
    count = 0
    for message in messages:
        queued_message = models.QueuedMessage(message=message)
        if priority:
            queued_message.priority = priority
        queued_message.save()
        count += 1
    return count
Esempio n. 2
0
def queue_email_message(email_message, fail_silently=False, priority=None):
    """
    Add new messages to the email queue.

    The ``email_message`` argument should be an instance of Django's core mail
    ``EmailMessage`` class.

    The messages can be assigned a priority in the queue by using the
    ``priority`` argument.

    The ``fail_silently`` argument is not used and is only provided to match
    the signature of the ``EmailMessage.send`` function which it may emulate
    (see ``queue_django_mail``).

    """
    from django_mailer import constants, models, settings

    if constants.PRIORITY_HEADER in email_message.extra_headers:
        priority = email_message.extra_headers.pop(constants.PRIORITY_HEADER)
        priority = constants.PRIORITIES.get(priority.lower())

    messages = (models.Message.objects.create(
        to_address=to_email,
        from_address=email_message.from_email,
        subject=email_message.subject,
        encoded_message=email_message.message().as_string())
                for to_email in email_message.recipients())

    if priority == constants.PRIORITY_EMAIL_NOW:
        if constants.EMAIL_BACKEND_SUPPORT:
            from django.core.mail import get_connection
            from django_mailer.engine import send_message
            connection = get_connection(backend=settings.USE_BACKEND)
            result = send_message(email_message, smtp_connection=connection)

            log_message = ''

            if result != constants.RESULT_SENT:
                log_message = 'Message send failure!'

            for message in messages:
                models.Log.objects.create(message=message,
                                          result=result,
                                          log_message=log_message)

            return (result == constants.RESULT_SENT)
        else:
            return email_message.send()
    count = 0
    for message in messages:
        queued_message = models.QueuedMessage(message=message)
        if priority:
            queued_message.priority = priority
        queued_message.save()
        count += 1
    return count
Esempio n. 3
0
def queue_email_message(email_message, fail_silently=False, priority=None, when_to_send=None, object_ref=None):
    """
    Add new messages to the email queue.

    The ``email_message`` argument should be an instance of Django's core mail
    ``EmailMessage`` class.

    The messages can be assigned a priority in the queue by using the
    ``priority`` argument.

    The ``fail_silently`` argument is not used and is only provided to match
    the signature of the ``EmailMessage.send`` function which it may emulate
    (see ``queue_django_mail``).

    The message can be queued to be sent at a future datetime by passing in the
    `when_to_send' argument.

    ``object_ref`` is tuple of the form ('object type', 'object id').

    """
    from django_mailer import constants, models, settings

    if constants.PRIORITY_HEADER in email_message.extra_headers:
        priority = email_message.extra_headers.pop(constants.PRIORITY_HEADER)
        priority = constants.PRIORITIES.get(priority.lower())

    if priority == constants.PRIORITY_EMAIL_NOW:
        if constants.EMAIL_BACKEND_SUPPORT:
            from django.core.mail import get_connection
            from django_mailer.engine import send_message
            connection = get_connection(backend=settings.USE_BACKEND)
            result = send_message(email_message, smtp_connection=connection)
            return (result == constants.RESULT_SENT)
        else:
            return email_message.send()
    count = 0
    for to_email in email_message.recipients():
        message = models.Message.objects.create(
            to_address=to_email, from_address=email_message.from_email,
            subject=email_message.subject,
            encoded_message=email_message.message().as_string())
        if object_ref:
            message.object_type, message.object_reference = object_ref
            message.save()
        if when_to_send:
            queued_message = models.QueuedMessage(message=message, date_queued=when_to_send)
        else:
            queued_message = models.QueuedMessage(message=message)
        if priority:
            queued_message.priority = priority
        queued_message.save()
        count += 1
    return count
Esempio n. 4
0
    def test_send_message_socket_error(self):
        '''If a socket error is raised then the standard handling
        is to return the error'''
        def raise_socket_error(*args, **kwargs):
            raise SocketError()

        FakeConnection.set_overrides([raise_socket_error])

        message = EmailMessage('Subject', 'Message', '*****@*****.**',
                               ['*****@*****.**'])

        result = send_message(message, self.connection)

        self.assertEquals(constants.RESULT_FAILED, result)
Esempio n. 5
0
    def test_send_message_socket_error(self):
        '''If a socket error is raised then the standard handling
        is to return the error'''
        def raise_socket_error(*args, **kwargs):
            raise SocketError()
        FakeConnection.set_overrides([ raise_socket_error ])

        message = EmailMessage(
            'Subject',
            'Message',
            '*****@*****.**',
            ['*****@*****.**'])

        result = send_message(message, self.connection)

        self.assertEquals(constants.RESULT_FAILED, result)
Esempio n. 6
0
def queue_email_message(email_message, fail_silently=False, priority=None,
                        html_message=''):
    """
    Add new messages to the email queue.

    The ``email_message`` argument should be an instance of Django's core mail
    ``EmailMessage`` class.

    The messages can be assigned a priority in the queue by using the
    ``priority`` argument.

    The ``fail_silently`` argument is not used and is only provided to match
    the signature of the ``EmailMessage.send`` function which it may emulate
    (see ``queue_django_mail``).

    """
    from django_mailer import constants, models, settings

    if constants.PRIORITY_HEADER in email_message.extra_headers:
        priority = email_message.extra_headers.pop(constants.PRIORITY_HEADER)
        priority = constants.PRIORITIES.get(priority.lower())

    count = 0
    for to_email in email_message.recipients():
        message = models.Message.objects.create(
            to_address=to_email, from_address=email_message.from_email,
            subject=email_message.subject, message=email_message.body,
            html_message=html_message)
        queued_message = models.QueuedMessage(message=message)
        if priority:
            queued_message.priority = priority
        queued_message.save()
        count += 1

        if priority == constants.PRIORITY_EMAIL_NOW:
            from django.core.mail import get_connection
            from django_mailer.engine import send_message
            connection = get_connection(backend=settings.MAILER_BACKEND)
            result = send_message(message, connection=connection)
            return (result == constants.RESULT_SENT)
    
    return count
Esempio n. 7
0
    def test_send_message_custom_handler(self):
        '''A custom error should be able to pick up any random exception'''
        def raise_exception(*args, **kwargs):
            raise_exception.result = Exception('Random exception')
            raise raise_exception.result

        FakeConnection.set_overrides([raise_exception])

        message = EmailMessage('Subject', 'Message', '*****@*****.**',
                               ['*****@*****.**'])

        def error_handler(arg_message, exception):
            self.assertEquals(raise_exception.result, exception)
            self.assertEquals(message, arg_message)
            error_handler.called = True
            return constants.RESULT_FAILED

        settings.CUSTOM_ERROR_HANDLER = error_handler

        result = send_message(message, self.connection)

        self.assertEquals(constants.RESULT_FAILED, result)
Esempio n. 8
0
    def test_send_message_custom_handler(self):
        '''A custom error should be able to pick up any random exception'''
        def raise_exception(*args, **kwargs):
            raise_exception.result = Exception('Random exception')
            raise raise_exception.result
        FakeConnection.set_overrides([ raise_exception ])

        message = EmailMessage(
            'Subject',
            'Message',
            '*****@*****.**',
            ['*****@*****.**'])

        def error_handler(arg_message, exception):
            self.assertEquals(raise_exception.result, exception)
            self.assertEquals(message, arg_message)
            error_handler.called = True
            return constants.RESULT_FAILED
        settings.CUSTOM_ERROR_HANDLER = error_handler

        result = send_message(message, self.connection)

        self.assertEquals(constants.RESULT_FAILED, result)