Printing emails in Django


When developing applications in Django, it may be nice to print emails instead of sending them. If you send them you have to be careful which addresses you use. Just being on the safe side and always using @example.{com,org,net} is not enough, you have to use an address you can actually retrieve emails for. And you have to configure your development environment to actually deliver mails. And then wait for the whole thing in each code-try iteration.

So, basing myself on the testing code, I’ve added this to settings.py and mails are now printed:

if DEBUG:
 from utils import BogusSMTPConnection
 from django.core import mail
 mail.SMTPConnection = BogusSMTPConnection

Of course you’ll also need the BogusSMTPConnection class, I’ve defined it as following:

from textwrap import wrap
class BogusSMTPConnection(object):
  """Instead of sending emails, print them to the console."""
 
  def __init__(*args, **kwargs):
    print("Initialized bogus SMTP connection")
 
  def open(self):
    print("Open bogus SMTP connection")
 
  def close(self):
    print("Close bogus SMTP connection")
 
  def send_messages(self, messages):
    print("Sending through bogus SMTP connection:")
    for message in messages:
      print("tFrom: %s" % message.from_email)
      print("tTo: %s" % ", ".join(message.to))
      print("tSubject: %s" % message.subject)
      print("t%s" % "nt".join(wrap(message.body)))
      print(messages)
      return len(messages)

And that’s it.

Related posts:

  1. Printing the class-path in Clojure
  2. From (broken) KMail to Evolution (or from maildir to mailbox)
  3. Pylons or Django?
  4. Django… awesome
  5. Ensuring the displaying of flash messages in Ruby on Rails

, , ,

  1. #1 by Jon on 2009-07-18 - 01:19

    This was really helpful, thanks. I was dreading the thought of setting up an SMTP server just to send emails I didn’t care about.

  2. #2 by Peter on 2009-11-20 - 03:31

    Just a nit, but I assume in the close method above you meant to print(“Close….) not clone.

  3. #3 by Pablo on 2009-11-20 - 08:46

    Thanks Peter, fixed!

(will not be published)
CommentLuv Enabled