Skip to content

Latest commit

 

History

History
303 lines (202 loc) · 8.71 KB

README.rst

File metadata and controls

303 lines (202 loc) · 8.71 KB

Django-Db-Mailer

Current version on PyPi Downloads from PyPi Documentation Status

Documentation available at Read the Docs.

What's that

Django module to easily send emails using django templates stored on database.
From box you can use it with django-celery for send background messages.
Also you have opportunity to create reports from logs by mail categories and slug.
Groups with Recipients and send by model signal also available by default.
That app very simple to install and use on your projects.

Installation:

  1. Using pip:
$ pip install django-db-mailer
  1. Add the dbmail application to INSTALLED_APPS in your settings file (usually settings.py)
  2. Sync database (./manage.py syncdb or ./manage.py migrate).

Important: South 1.0 or greater is required to run migrations.

Usage examples

from dbmail.models import MailTemplate
from dbmail import send_db_mail

# New dbmail template
MailTemplate.objects.create(
    name="Site welcome template",
    subject="Welcome",
    message="Welcome to our site. We are glad to see you.",
    slug="welcome",
    is_html=False,
)

# Send message with created template
send_db_mail(
    # slug which defined on db template
    slug='welcome',

    # recipient can be list, or str separated with comma or simple string
    # '[email protected]' or '[email protected], [email protected]' or
    # ['[email protected]', '[email protected]'] or string Mail group slug
    recipient='[email protected]',

    # All *args params will be accessible on template context
    {
        'username': request.user.username,
        'full_name': request.user.get_full_name(),
        'signup_date': request.user.date_joined
    },

    # You can access to all model fields. For m2m and fk fields, you should use module_name
    MyModel.objects.get(pk=1),

    # Optional kwargs:
    # from_email='[email protected]'
    # cc=['[email protected]'],
    # bcc=['[email protected]'],
    # user=User.objects.get(pk=1),
    #
    # language='ru',
    #
    # attachments=[(filename, content, mimetype)],
    # files=['hello.jpg', 'world.png'],
    # headers={'Custom-Header':'Some value'},
    #
    # queue='default',
    # retry_delay=300,
    # max_retries=3,
    # retry=True,
    # time_limit=30,
    # send_after=60,
    #
    # use_celery=True,
)

Local demo installation

$ sudo apt-get install -y virtualenvwrapper redis-server git python-dev libxml2-dev libxslt-dev zlib1g-dev || brew install pyenv-virtualenvwrapper redis git
$ source /usr/share/virtualenvwrapper/virtualenvwrapper.sh || source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv db-mailer
$ workon db-mailer
$ git clone --depth 1 https://github.com/LPgenerator/django-db-mailer.git db-mailer
$ cd db-mailer
$ python setup.py develop
$ cd demo
$ pip install -r requirements.txt
$ python manage.py syncdb --noinput
$ python manage.py migrate --noinput
$ python manage.py createsuperuser --username admin --email [email protected]
$ python manage.py runserver >& /dev/null &
$ python manage.py celeryd -Q default >& /dev/null &

Open Shell:

$ python manage.py shell_plus --print-sql

Create new template:

from dbmail.models import MailTemplate
from dbmail import send_db_mail

MailTemplate.objects.create(
    name="Site welcome template",
    subject="Welcome",
    message="Welcome to our site. We are glad to see you.",
    slug="welcome",
    is_html=False,
)

Try to send test email with created template (without celery):

send_db_mail('welcome', '[email protected]', use_celery=False)

Send email using celery:

send_db_mail('welcome', '[email protected]')

Check mail logs:

from pprint import pprint
from django.forms.models import model_to_dict
from dbmail.models import MailLog

pprint([model_to_dict(obj) for obj in MailLog.objects.all()])

Open app on browser:

$ xdg-open http://127.0.0.1:8000/admin/dbmail/ >& /dev/null || open http://127.0.0.1:8000/admin/dbmail/ >& /dev/null

Additional information

Revision

For support template reversion, you can install django-reversion. Find information about compatibility with your Django versions here.

Editor

To enable editor, you may install and configure django-tinymce app.

Theme

django-db-mailer supported from box django-grappelli skin. Information about compatibility available here.

Queue

Install and configure django-celery for background message sending with priorities. You can find celery settings examples on demo project. We recommended to use django-celery-mon with django-celery for monitoring celery and supervisor processes.

Premailer

For turns CSS blocks into style attributes, you can install premailer from PyPi.

Translation

For use different language on your mail templates, install django-modeltranslation or grappelli-modeltranslation. Add into settings.py:

MODELTRANSLATION_DEFAULT_LANGUAGE = 'en'
MODELTRANSLATION_LANGUAGES = ('ru', 'en')
MODELTRANSLATION_TRANSLATION_FILES = (
    'dbmail.translation',
)
INSTALLED_APPS = ('modeltranslation',) + INSTALLED_APPS
# INSTALLED_APPS = ('grappelli', 'grappelli_modeltranslation', 'modeltranslation',) + INSTALLED_APPS

Update dbmail fields:

$ ./manage.py sync_translation_fields --noinput

Postmark backend

Install python-postmark app via pip. Configure your settings:

POSTMARK_API_KEY = ''
POSTMARK_SENDER = '[email protected]'
POSTMARK_TEST_MODE = False
EMAIL_BACKEND = 'postmark.django_backend.EmailBackend'

Tracking:

$ pip install httpagentparser django-ipware

For track information about user, or about mail is read, you must be enable logging, and enable tracking on settings.

Older versions

Very simple version of this app, available here. That version do not include celery settings, bcc, api, mail settings, signals, mail groups and model browser.

Notes

All app features available only with django-celery and with Redis.

External API usage

from dbmail.models import ApiKey

ApiKey.objects.create(name='Test', api_key='ZzriUzE')
$ pip install httpie
$ http -f POST http://127.0.0.1:8000/dbmail/api/ api_key=ZzriUzE slug=welcome [email protected] data='{"name": "Ivan", "age": 20}'
    or
$ apt-get install curl || brew install curl
$ curl -X POST http://127.0.0.1:8000/dbmail/api/ --data 'api_key=ZzriUzE&slug=welcome&[email protected]'

Publications

Screenshots

/screenshots/template_edit.jpg

/screenshots/templates_changelist.jpg

/screenshots/template_log_changelist.jpg

/screenshots/template_log_view.jpg

/screenshots/group_change.jpg

/screenshots/signal_edit.jpg

/screenshots/signals_changelist.jpg

/screenshots/apps_view.jpg

/screenshots/apps_browse_vars.jpg

/screenshots/smtp_changelist.jpg

/screenshots/apikey_changelist.jpg

/screenshots/bcc_changelist.jpg

/screenshots/template_compare.jpg

/screenshots/tracking_edit.jpg

Compatibility:

  • Python: 2.6, 2.7
  • Django: 1.4, 1.5, 1.6, 1.7