Firstclass is a proxy email backend for Django that allows for global email transformations such as automatically creating a plain text version of html emails or automatically creating an online version of the email that can be read in browser.
pip install django-firstclass
- Add
'firstclass'
toINSTALLED_APPS
- Add
url(r'^email/', include('firstclass.urls'))
to your urlconf. - Set
EMAIL_BACKEND
to'firstclass.backends.ProxyBackend'
- Syncdb
The email backend to send processed emails to after they've gone through the middleware.
FIRSTCLASS_EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Firstclass middleware works just like Django middleware. Firstclass applies middleware
in the order it's defined in FIRSTCLASS_MIDDLEWARE
, top-down. You can even create your
own middleware. See: Custom Middleware
FIRSTCLASS_MIDDLEWARE = (
'firstclass.middleware.online.ViewOnlineMiddleware',
'firstclass.middleware.alternative.MultiAlternativesMiddleware',
'firstclass.middleware.text.PlainTextMiddleware',
)
firstclass.middleware.text.PlainTextMiddleware
A dictionary of rules for converting html to plain text. Keys should be a qualified
selector for BeautifulSoup's findAll
. Values can either be a formatting string or
a function that accepts one argument, attrs
. All attributes found on the element
can be used for formatting or will be passed to your function in attrs
.
FIRSTCLASS_PLAINTEXT_RULES = {
'a': '(%(text)s) %(href)s',
'img': '%(title)s: %(src)s',
}
firstclass.middleware.alternative.MultiAlternativesMiddleware
Coerces email to EmailMultiAlternatives
so that a multiple versions of the
email can be added.
firstclass.middleware.online.ViewOnlineMiddleware
Saves all emails and adds a link to the email body so that they can be viewed online
in a web browser. Ideally this middleware should come before the PlainTextMiddlewware
so that the link that is added is converted to plain text.
ViewOnlineMiddleware
uses the template firstclass/view_online_wrap.html
to append
the link to the bottom of the email. You can override this by providing your own in your
templates directory.
If this is True
the user will need to be logged in to view email. The user's email would
also need to be one of the original recipients of the email.
FIRSTCLASS_VIEWONLINE_AUTH = False
Defining custom middleware for Firstclass is simple. Middleware should be a single
Python class that defines process_message
.
process_message(self, message)
message
is an EmailMessage
or an EmailMessage
like object. process_message
should return message
or None
. If it returns None
the email will be dropped.
firstclass.views.view_message_online(request, key, template='firstclass/message.html')
This view is used by the ViewOnlineMiddleware
middleware. It's template is
located at firstclass/message.html
. You can override this by providing your own
in your templates directory. The render context contains message
which is Message
model instance.