diff --git a/SciPost_v1/settings/local_jorran.py b/SciPost_v1/settings/local_jorran.py index 62c4a1796226d35cfddb214d1c75916aa56b914b..c746498691715ab4439cbd805998f65a77820f86 100644 --- a/SciPost_v1/settings/local_jorran.py +++ b/SciPost_v1/settings/local_jorran.py @@ -37,5 +37,5 @@ CROSSREF_LOGIN_PASSWORD = get_secret("CROSSREF_LOGIN_PASSWORD") CROSSREF_DEPOSIT_EMAIL = 'jorrandewit@scipost.org' # Customized mailbackend -EMAIL_BACKEND = 'mails.backends.filebased.EmailBackend' -EMAIL_BACKEND_ORIGINAL = 'django.core.mail.backends.filebased.EmailBackend' +EMAIL_BACKEND = 'mails.backends.filebased.ModelEmailBackend' +EMAIL_BACKEND_ORIGINAL = 'mails.backends.filebased.EmailBackend' diff --git a/mails/backends/filebased.py b/mails/backends/filebased.py index 64a6c9200c712bb37567e232efe6b7af37825165..a41f483cdb7f455a09e65c6b6fa85a617914d2dd 100644 --- a/mails/backends/filebased.py +++ b/mails/backends/filebased.py @@ -12,6 +12,8 @@ class EmailBackend(FileBacked): self.stream.write(b'Bcc: ' + bcc_str + b'\n') super().write_message(message) + +class ModelEmailBackend(FileBacked): def send_messages(self, email_messages, force_original=False): """Write all messages to the stream in a thread-safe way.""" if force_original: diff --git a/mails/management/commands/send_mails.py b/mails/management/commands/send_mails.py index a10fb859d0515987e49db7f507fb2cd19e2ee70c..651b92f5d744fa0d8994de12ed828893b6ff2c99 100644 --- a/mails/management/commands/send_mails.py +++ b/mails/management/commands/send_mails.py @@ -19,7 +19,12 @@ class Command(BaseCommand): if hasattr(settings, 'EMAIL_BACKEND_ORIGINAL'): backend = settings.EMAIL_BACKEND_ORIGINAL else: + # Fallback to Django's default backend = 'django.core.mail.backends.smtp.EmailBackend' + + if backend == 'mails.backends.filebased.ModelEmailBackend': + raise AssertionError('The `EMAIL_BACKEND_ORIGINAL` cannot be the ModelEmailBackend') + connection = get_connection(backend=backend, fail_silently=False) for db_mail in mails: mail = EmailMultiAlternatives( @@ -32,8 +37,11 @@ class Command(BaseCommand): connection=connection) if db_mail.body_html: mail.attach_alternative(db_mail.body_html, 'text/html') - print('mail ' + str(db_mail.id)) - return mail.send() + response = mail.send() + if response: + db_mail.processed = True + db_mail.save() + return response def handle(self, *args, **options): if options.get('id'):