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