diff --git a/queued_mailer/__init__.py b/queued_mailer/__init__.py index d287c55..3e7d8f3 100644 --- a/queued_mailer/__init__.py +++ b/queued_mailer/__init__.py @@ -1,9 +1,14 @@ import logging import sys +from django.utils.module_loading import import_string + logger = logging.getLogger(__name__) hdlr = logging.StreamHandler(sys.stderr) formatter = logging.Formatter('%(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) -logger.setLevel(logging.INFO) \ No newline at end of file +logger.setLevel(logging.INFO) + +# celery app +celery_app = import_string('project.celery_app.app') diff --git a/queued_mailer/backend.py b/queued_mailer/backend.py index 8842ecc..311c3b4 100644 --- a/queued_mailer/backend.py +++ b/queued_mailer/backend.py @@ -1,10 +1,18 @@ from django.core.mail.backends.base import BaseEmailBackend +from django.utils.encoding import force_text from django.utils.module_loading import import_string from . import logger from .settings import EMAIL_SEND_TASK +def _get_message_recipients(email_message): + message_recipients = getattr(email_message, 'to', None) + if not isinstance(message_recipients, list): + return 'unknown' + return ', '.join(map(force_text, message_recipients)) + + class EmailBackend(BaseEmailBackend): task = None @@ -15,7 +23,10 @@ class EmailBackend(BaseEmailBackend): def send_messages(self, email_messages): num_sent = 0 for email in email_messages: - logger.info(email) - logger.info(self.task) - num_sent += 1 + try: + self.task.apply_async(email) + num_sent += 1 + except Exception as e: + logger.error("cannot send message %s: %r" % (_get_message_recipients(email), e)) + return num_sent diff --git a/queued_mailer/tasks.py b/queued_mailer/tasks.py index f3392a9..430da12 100644 --- a/queued_mailer/tasks.py +++ b/queued_mailer/tasks.py @@ -1,7 +1,8 @@ -from . import logger +from . import logger, celery_app as app from .settings import EMAIL_BACKEND +@app.task() def send_message(): logger.info(EMAIL_BACKEND) logger.info('sent')