Skip to main content

Django app for managing multiple mass-mailing lists with both plaintext as well as HTML templates (and TinyMCE editor for HTML messages), images and a smart queueing system all right from the admin interface.

Project description

https://secure.travis-ci.org/dokterbob/django-newsletter.png?branch=master

Newsletter application for the Django web framework.

What is it?

Django app for managing multiple mass-mailing lists with both plaintext as well as HTML templates with rich text widget integration, images and a smart queueing system all right from the admin interface.

Status

We are currently using this package in several large to medium scale production environments, but it should be considered a permanent work in progress.

Translations

Most if not all strings are available in Dutch, German and English. Contributions to translations are welcome through Transifex.

https://www.transifex.com/projects/p/django-newsletter/resource/django/chart/image_png

Compatibility

Currently, django-newsletter is being tested to run on Python 2.6, 2.7 and the latest Django 1.4 and 1.5 releases. Except for tests it should be compatible with Python 2.5 as well.

Requirements

Please refer to requirements.txt for an updated list of required packes.

Installation

  1. Get it from the Cheese Shop:

    pip install django-newsletter

    Or get the latest & greatest from Github and link it to your application tree:

    pip install -e git://github.com/dokterbob/django-newsletter.git#egg=django-newsletter

    (In either case it is recommended that you use VirtualEnv in order to keep your Python environment somewhat clean.)

  2. Add newsletter and to INSTALLED_APPS in settings.py and make sure that your favourite rich text widget (optional), some Django contrib dependencies, sorl-thumbnail and django-extensions (the latter is used for the submission jobs) are there as well:

    INSTALLED_APPS = (
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.auth',
        'django.contrib.sites',
        ...
        # Imperavi (or tinymce) rich text editor is optional
        'imperavi',
        'django_extensions',
        'sorl.thumbnail',
        ...
        'newsletter',
        ...
    )
  3. Install and configure your preferred rich text widget (optional).

    Known to work are django-imperavi as well as for django-tinymce. Be sure to follow installation instructions for respective widgets. After installation, the widgets can be selected as follows:

    # Using django-imperavi
    NEWSLETTER_RICHTEXT_WIDGET = "imperavi.widget.ImperaviWidget"
    
    # Using django-tinymce
    NEWSLETTER_RICHTEXT_WIDGET = "tinymce.widgets.TinyMCE"

    If not set, django-newsletter will fall back to Django’s default TextField widget.

  4. Import subscription, unsubscription and archive URL’s somewhere in your urls.py:

    urlpatterns = patterns('',
        ...
        (r'^newsletter/', include('newsletter.urls')),
        ...
    )
  5. Enable Django’s staticfiles app so the admin icons, CSS and JavaScript will be available where we expect it.

  6. Create required data structure and load default template fixture:

    ./manage.py syncdb
    ./manage.py loaddata default_templates
  7. Change the default contact email listed in templates/newsletter/subscription_subscribe.html and templates/newsletter/subscription_update.html.

  8. Run the tests to see if it all works:

    ./manage.py test

    If this fails, please contact me! If it doesn’t: that’s a good sign, chap. You’ll probably have yourself a working configuration!

  9. Add jobs for sending out mail queues to crontab:

    @hourly /path/to/my/project/manage.py runjobs hourly
    @daily /path/to/my/project/manage.py runjobs daily
    @weekly /path/to/my/project/manage.py runjobs weekly
    @monthly /path/to/my/project/manage.py runjobs monthly

South migrations / upgrading

Since 5f79f40, the app makes use of South for schema migrations. As of this version, using South with django-newsletter is the official recommendation and installing it is easy.

When upgrading from a pre-South version of newsletter to a current release (in a project for which South has been enabled), you might have to fake the initial migration as the DB tables already exist. This can be done by running the following command:

./manage.py migrate newsletter 0001 --fake

Usage

  1. Start the development server: ./manage.py runserver

  2. Navigate to /admin/ and: behold!

  3. Put a submission in the queue.

  4. Submit your message with ./manage.py runjob submit

  5. For a proper understanding, please take a look at the model graph.

https://github.com/dokterbob/django-newsletter/raw/master/graph_models.png

Unit tests

Fairly extensive tests are available for internal frameworks, web (un)subscription and mail sending. Sending a newsletter to large groups of recipients (+10k) has been confirmed to work in multiple production environments. Tests for pull req’s and the master branch are automatically run through Travis CI.

Feedback

If you find any bugs or have feature request for django-newsletter, don’t hesitate to open up an issue on GitHub (but please make sure your issue hasn’t been noticed before, finding duplicates is a waste of time). When modifying or adding features to django-newsletter in a fork, be sure to let me know what you’re building and how you’re building it. That way we can coordinate whether, when and how it will end up in the main fork and (eventually) an official release.

In general: thanks for the support, feedback, patches and code that’s been flowing in over the years! Django has a truly great community. <3

Donations

Donations are welcome in Bitcoin or Paypal through Properster. For Bitcoin, the link/QRCode below should suffice. If you donate, be sure to fill in the note. I love to hear what people are using it for!

http://qr.ma.eatgold.com/temp/bitcoin12omMNyLirypArtqwDtoKM2av1wsLMbVWs.png

License

This application is released under the GNU Affero General Public License version 3.

Changes

0.4.1 (15-04-2013)

  • Started keeping a decent history file. (Finally…)

  • Support Django 1.5; make use of class based generic views

  • Drop Django 1.3 and Python 2.5 support.

  • 100% test coverage for views

  • Farsi translations (contributed by rohamn)

  • French translations (contributed by smalter)

  • Admin actions for subscribing/unsubscribing (contributed by jnns)

  • Introduced django-webtest for some tests

  • Exempt previews from XFrame protection (fixes #54)

0.4 (20-11-2012)

  • Major code cleanup; PEP8, imports, restructuring, removal of legacy code

  • Improved testing throgh Travis and better test coverage

  • South migrations

  • Added German translation (contributed by jnns)

  • WYSIWYG editor is now optional and pluggable, Imperavi and TinyMCE supported

  • Timezone-aware date-times when Django 1.4 is used

  • Ue of Django 1.3’s messages framework

  • Many small bugfixes (see GitHub issues)

  • Drop support for Django 1.2

  • Automatic detection of charset, encoding and dialect for CSV import

  • Much cleaner log messages with proper message substitution

  • Use Django’s staticfiles contrib for static assets in admin interface

  • Use surlex for more readable URL templates

  • Use sorl-thumbnail for article images and default templates

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-newsletter-0.4.1.tar.gz (220.3 kB view details)

Uploaded Source

File details

Details for the file django-newsletter-0.4.1.tar.gz.

File metadata

File hashes

Hashes for django-newsletter-0.4.1.tar.gz
Algorithm Hash digest
SHA256 e546a31a5ac55c64279354e7da6ecc9b335dcdac4b57960e0e505e640a1dfe39
MD5 e51ffe8fc74e34889e38366d8d9ad1e7
BLAKE2b-256 0c9504e44dbf11168434c31df85d7119e11ea6a0d2223cb9e06722ff8fa0c9f2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page