diff --git a/.gitignore b/.gitignore index fa9a852..e62ec44 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ entity_emailer_db # Pycharm .idea/ + +activate.sh diff --git a/entity_emailer/interface.py b/entity_emailer/interface.py index 6502bc7..dca68ba 100644 --- a/entity_emailer/interface.py +++ b/entity_emailer/interface.py @@ -34,7 +34,6 @@ def send_unsent_scheduled_emails(): # Fetch the contexts of every event so that they may be rendered context_loader.load_contexts_and_renderers([e.event for e in to_send], [email_medium]) - default_from_email = get_from_email_address() emails = [] for email in to_send: to_email_addresses = get_subscribed_email_addresses(email) @@ -42,7 +41,7 @@ def send_unsent_scheduled_emails(): text_message, html_message = email.render(email_medium) message = create_email_message( to_emails=to_email_addresses, - from_email=email.from_address or default_from_email, + from_email=email.from_address or get_from_email_address(), subject=email.subject or extract_email_subject_from_html_content(html_message), text=text_message, html=html_message, @@ -62,6 +61,14 @@ def convert_events_to_emails(): # Get the email medium email_medium = get_medium() + # Get the default from email + default_from_email = get_from_email_address() + # Find any unseen events and create unsent email objects for event, targets in email_medium.events_targets(seen=False, mark_seen=True): - Email.objects.create_email(event=event, recipients=targets) + + # Check the event's context for a from_address, otherwise fallback to default + from_address = event.context.get('from_address') or default_from_email + + # Create the emails + Email.objects.create_email(event=event, from_address=from_address, recipients=targets) diff --git a/entity_emailer/tests/interface_tests.py b/entity_emailer/tests/interface_tests.py index 25a3294..8b761ce 100644 --- a/entity_emailer/tests/interface_tests.py +++ b/entity_emailer/tests/interface_tests.py @@ -60,6 +60,40 @@ def test_no_subscriptions(self): EntityEmailerInterface.convert_events_to_emails() self.assertFalse(Email.objects.exists()) + def test_default_from_email(self): + # settings.DEFAULT_FROM_EMAIL is already set to test@example.com + source = G(Source) + e = G(Entity) + G(Subscription, entity=e, source=source, medium=self.email_medium, only_following=False, sub_entity_kind=None) + email_context = { + 'entity_emailer_template': 'template', + 'entity_emailer_subject': 'hi', + } + event = G(Event, source=source, context=email_context) + G(EventActor, event=event, entity=e) + + EntityEmailerInterface.convert_events_to_emails() + email = Email.objects.get() + + self.assertEqual(email.from_address, 'test@example.com') + + def test_custom_from_email(self): + source = G(Source) + e = G(Entity) + G(Subscription, entity=e, source=source, medium=self.email_medium, only_following=False, sub_entity_kind=None) + email_context = { + 'entity_emailer_template': 'template', + 'entity_emailer_subject': 'hi', + 'from_address': 'custom@example.com' + } + event = G(Event, source=source, context=email_context) + G(EventActor, event=event, entity=e) + + EntityEmailerInterface.convert_events_to_emails() + email = Email.objects.get() + + self.assertEqual(email.from_address, 'custom@example.com') + @freeze_time('2013-1-2') def test_basic_only_following_false_subscription(self): source = G(Source) diff --git a/entity_emailer/version.py b/entity_emailer/version.py index ef91994..092052c 100644 --- a/entity_emailer/version.py +++ b/entity_emailer/version.py @@ -1 +1 @@ -__version__ = '0.14.0' +__version__ = '0.14.1' diff --git a/release_notes.rst b/release_notes.rst index 9e7e16b..76b0a20 100644 --- a/release_notes.rst +++ b/release_notes.rst @@ -1,6 +1,10 @@ Release Notes ============= +0.14.1 +------ +* Added ability to set custom From Address + 0.14.0 ------ * Add Python 3.6 support