annotate gpp/mailer/__init__.py @ 316:767cedc7d12a

Fixing #144; integrate with new Django logging support. Also added unit tests for Donations app.
author Brian Neal <bgneal@gmail.com>
date Sun, 30 Jan 2011 20:02:32 +0000
parents aef00df91165
children
rev   line source
bgneal@180 1 from socket import error as socket_error
bgneal@180 2 import smtplib
bgneal@180 3 import time
bgneal@316 4 import logging
bgneal@180 5
bgneal@180 6 import django.core.mail
bgneal@180 7
bgneal@180 8 import mailer.models
bgneal@180 9
bgneal@180 10
bgneal@180 11 def enqueue_mail(subject, message, from_email, recipient_list):
bgneal@180 12 """Creates mailer mail queue entries for the given email."""
bgneal@180 13
bgneal@180 14 if len(subject) > mailer.models.MAX_SUBJECT:
bgneal@180 15 subject = u'%s...' % subject[:mailer.models.MAX_SUBJECT - 3]
bgneal@180 16
bgneal@180 17 for recipient in recipient_list:
bgneal@180 18 mailer.models.Message(
bgneal@180 19 from_address=from_email,
bgneal@180 20 to_address=recipient,
bgneal@180 21 subject=subject,
bgneal@180 22 body=message).save()
bgneal@180 23
bgneal@180 24
bgneal@180 25 def send_queued_mail():
bgneal@180 26 """Reads the queued messages from the database, sends them, and removes them
bgneal@180 27 from the queue."""
bgneal@180 28
bgneal@180 29 sent, errors = 0, 0
bgneal@180 30
bgneal@180 31 logging.debug("Sending queued mail...")
bgneal@180 32 start_time = time.time()
bgneal@180 33
bgneal@180 34 msgs = mailer.models.Message.objects.all()
bgneal@180 35 for msg in msgs:
bgneal@180 36 try:
bgneal@180 37 django.core.mail.send_mail(
bgneal@316 38 msg.subject,
bgneal@316 39 msg.body,
bgneal@316 40 msg.from_address,
bgneal@180 41 [msg.to_address],
bgneal@180 42 fail_silently=False)
bgneal@180 43 except (socket_error, smtplib.SMTPException), e:
bgneal@180 44 errors += 1
bgneal@316 45 logging.error("Error sending queued mail: %s", e)
bgneal@180 46 else:
bgneal@316 47 sent += 1
bgneal@316 48 msg.delete()
bgneal@180 49
bgneal@180 50 end_time = time.time()
bgneal@180 51 logging.debug("Sent queued mail: %d successful, %d error(s); elapsed time: %.2f" % (
bgneal@180 52 sent, errors, end_time - start_time))