Skip to main content

An app that allows you to keep track of email activities and send mail asynchronously in django.

Project description

Django Post Office is a simple mail queuing and logging app that allows you to keep track of email activities and send mails asynchronously in django. Supports sending HTML email.

The concept is similar to django-mailer and django-mailer-2. I maintained my own fork of django-mailer-2 here until I decided to make one from scratch because I wanted a cleaner code base.

post_office is implemented as a Django EmailBackend so you don’t need to change any of your code to start sending email asynchronously.

Dependencies

Installation

  • Install via pypi:

    pip install django-post_office
  • Add post_office to your INSTALLED_APPS in django’s settings.py:

    INSTALLED_APPS = (
        # other apps
        "post_office",
    )
  • Run syncdb:

    python manage.py syncdb
  • Set post_office.EmailBackend as your EMAIL_BACKEND in django’s settings.py:

    EMAIL_BACKEND = 'post_office.EmailBackend'

Usage

If you use post_office’s EmailBackend, it will automatically queue emails sent using django’s send_mail in the database.

To actually send them out, run python manage.py send_queued_mail. You can schedule this to run regularly via cron:

* * * * * (/usr/bin/python manage.py send_queued_mail >> send_mail.log 2>&1)

By default, post_office uses django’s SMTP EmailBackend. If you want to use a different backend, you can do so by changing POST_OFFICE_BACKEND.

For example if you want to use django-ses:

POST_OFFICE_BACKEND = 'django_ses.SESBackend'

You can view also queued emails along with their statuses if you have django’s admin interface enabled:

INSTALLED_APPS = (
    # ...
    'django.contrib.admin',
    # ...
)

Management Commands

  • send_queued_mail - send queued emails, those that aren’t successfully sent they will be marked as failed.

  • cleanup_mail - delete all emails created before an X number of days (defaults to 90).

You may want to set these up via cron to run regularly:

* * * * * (cd $PROJECT; python manage.py send_queued_mail >> $PROJECT/cron_mail.log 2>&1)
0 1 * * * (cd $PROJECT; python manage.py cleanup_mail --days=30 >> $PROJECT/cron_mail_cleanup.log 2>&1)

Lower Level Usage

post_office also comes with a send_mail command similar to django’s. It accepts two extra arguments, html_message and priority (high, medium, low or now).

Here’s how to use it:

from post_office import send_mail, PRIORITY
send_mail('subject', 'plaintext message', 'from@example.com', ['to@example.com'],
          '<p>HTML message</p>', priority=PRIORITY.medium)

post_office is also task queue friendly. Passing now as priority into send_mail will deliver the email right away, regardless of how many emails you have in your queue:

from post_office import send_mail, PRIORITY
send_mail('subject', 'plaintext message', 'from@example.com', ['to@example.com'],
          '<p>HTML message</p>', priority=PRIORITY.now)

This is useful if you already use something like django-rq to send emails asynchronously and only need to store email activities and logs.

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-post_office-0.1.1.tar.gz (10.7 kB view details)

Uploaded Source

File details

Details for the file django-post_office-0.1.1.tar.gz.

File metadata

File hashes

Hashes for django-post_office-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c9713999da08b677bedd84d800f8a46e630df3f57d6e19141a983989e235fc36
MD5 3ecf032634b18a167aca266fb15c030a
BLAKE2b-256 012a7a5995b24b984470d30134b6d3af67aba93e9cedf742f59c07d8cb96c9bd

See more details on using hashes here.

Supported by

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