Earlier last week, I had an email die in the middle of sending from one of my applications. This hardly every happens, but when it does it fails hard. People just expect emails to go through, no matter what. In order to hedge my bets against emails failing, I've developed a small Django app to control the sending of emails. Using Django Mail Queue you can add a new email to the queue, it will attempt to send it, and if it fails it will be added to the DB and can be attempted again via cron job.
Django Celery could also be used to solve this problem, but until my projects get big enough to justify that extra expense, I'll be using this instead. Enjoy!