Bitbucket is a code hosting site with unlimited public and private repositories. We're also free for small teams!

Close

Outbox.py: SMTP Client for Humans

This is simplest SMTP client you'll ever see. It's 100% synchronous...

Usage

Give your app an outbox easily:

from outbox import Outbox, Email, Attachment

# io.StringIO for Python 3 folks
from StringIO import StringIO

attachments = [
    Attachment('kittens.jpg', fileobj=open('ducks.jpg', 'rb')),
    Attachment('my-transient-file.bin', fileobj=StringIO('some raw data')),
]

outbox = Outbox(username='username', password='password',
        server='server', port=1234, mode='SSL')

outbox.send(Email(subject='my subject', body='some nice sentiment',
        recipients=['nathan@getoffmalawn.com']), attachments=attachments)

# html email with attachments
outbox.send(Email(subject='my subject', html_body='<b>SOME REALLY NICE SENTIMENT</b>',
        recipients=['nathan@getoffmalawn.com']), attachments=attachments)

This method will log in to the server each time send() is called.

Alternatively, you can use Outbox as a context manager:

with Outbox(username='username', password='password',
        server='server', port=1234, mode='SSL') as outbox:

    outbox.send(Email(subject='my subject', body='some nice sentiment',
            recipients=['nathan@getoffmalawn.com']), attachments=attachments)

    # html email with attachments
    outbox.send(Email(subject='my subject', html_body='<b>SOME REALLY NICE SENTIMENT</b>',
            recipients=['nathan@getoffmalawn.com']), attachments=attachments)

Using Outbox as a context manager has the added benefit of performing a single login to send all emails.

Installation

Installing Outbox.py is simple:

$ pip install outbox

Change History

0.1.6 (release pending)
  • Added certfile and keyfile arguments for when TLS mode is used.
  • Internal clean up of some of the connection code.
  • Cleaned up test runner slightly.
  • Fix broken py3k support since 0.1.5
  • Thanks to Dan Milstein for the following contributions!
  • MIME type bugfix on attachments.
  • New add_attachments function.
0.1.5 (3rd March 2013)
  • Thanks to Peter Naudus for the following contributions!
  • Added debug argument to Outbox class, to switch smtplib's debugging.
  • Added fields argument to Email class, to allow additional email fields to be set.
  • Connection and disconnection are now exposed.
  • Internal cleanup of some of the connection code.
0.1.4 (29th October 2012)
  • Handle passing a single recipient as a string, instead of forcing the recipient to be a list.
  • Handle utf8 email properly. Thanks, Zhang Mingyuan! I doubt I've covered every use case, so the charset to use can be passed in when constructing an Email.
  • Added a sender_address method to the Outbox class, for when the username used for authentication isn't good enough.
0.1.3 (3rd July 2012)
  • Made a few lines of code a bit easier to follow. No functional changes.
  • Updated the license to actually hold copyright in my name, instead of Kenneth Reitz. Does this mean he owned copyright on the library up until now? Can I even change the license? I'm unsure.
0.1.2 (2nd June 2012)
  • Made Outbox a context manager, so it can be used with the with statement. As noted in the example, this has the added benefit of performing a single login to send all emails, you should get better performance using a with statement.
  • Removed raw and filepath arguments to Attachment. They were both begging to point to a file-like object, so that's what you have now - an argument called fileobj
  • Fixed annoying encoding error when trying to send binary attachments.
  • The Email object does not have a type argument anymore. Instead, there is body and html_body, so you can send an email with both html and plain-text bodies.
0.1.1 (27th May 2012)
  • Initial release

Recent activity

Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.