Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,5 @@ entity_emailer_db

# Pycharm
.idea/

activate.sh
13 changes: 10 additions & 3 deletions entity_emailer/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,14 @@ 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)
if to_email_addresses:
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,
Expand All @@ -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)
34 changes: 34 additions & 0 deletions entity_emailer/tests/interface_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion entity_emailer/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.14.0'
__version__ = '0.14.1'
4 changes: 4 additions & 0 deletions release_notes.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
Release Notes
=============

0.14.1
------
* Added ability to set custom From Address

0.14.0
------
* Add Python 3.6 support
Expand Down