fluentcms-emailtemplates

Creating e-mail messages, with multiple layouts and multilingual content.


Keywords
django-fluent, email-template
License
Apache-2.0
Install
pip install fluentcms-emailtemplates==2.0

Documentation

fluentcms-emailtemplates

https://img.shields.io/travis/django-fluent/fluentcms-emailtemplates/master.svg?branch=master

An email template system, that uses django-fluent-contents blocks to define the e-mail templates.

Features:

  • Multilingual content.
  • Multisite support.
  • Custom layouts (=Django templates).
  • Custom context variables

Installation

First install the module, preferably in a virtual environment. It can be installed from PyPI:

pip install fluentcms-emailtemplates

First make sure the project is configured for django-fluent-contents.

Then add the following settings:

INSTALLED_APPS += (
    'fluentcms_emailtemplates',
    'fluentcms_emailtemplates.plugins.emailtext',
)

FLUENTCMS_EMAILTEMPLATES_PLUGINS = (
    'EmailTextPlugin',
)

The database tables can be created afterwards:

./manage.py migrate

Configuration

The following settings are defined by default:

FLUENTCMS_EMAILTEMPLATES_LAYOUTS = (
    # A layout points to a template named:
    # fluentcms_emailtemplates/emails/{slug}/{layout}.html
    # fluentcms_emailtemplates/emails/{layout}.html
    ('default', _("Default")),
)

# Possible plugins to use in the email template.
# By default, that is FLUENT_CONTENTS_PLACEHOLDER_CONFIG['email_templates']
FLUENTCMS_EMAILTEMPLATES_PLUGINS = (
    'EmailTextPlugin',
)

# Add extras context data for an e-mail preview.
FLUENTCMS_EMAILTEMPLATES_PREVIEW_CONTEXT = {}

# Optionally allow developers to share email templates between all sites in a multisite setup.
FLUENTCMS_EMAILTEMPLATES_ENABLE_CROSS_SITE = False

# Enable multisite support by default
FLUENTCMS_EMAILTEMPLATES_FILTER_SITE_ID = True

Usage

Create email templates in the admin. Use the following code to create an email:

from email.utils import formataddr
from fluentcms_emailtemplates.models import *

template = EmailTemplate.objects.get_for_slug('order-confirmation')
email = template.get_email_message(
    base_url='http://example.org/',
    context={
        'order_number': "123-xy"
    },
    to=[
        formataddr(('You', 'you@example.org')),
    ],
)

email.send()

Tip: when creating a separate template for the plain-text email, start the template with {% autoescape off %}. This avoids creating HTML entities inside the plain-text email.

Contributing

If you like this module, forked it, or would like to improve it, please let us know! Pull requests are welcome too. :-)