view gpp/mailer/__init__.py @ 300:58e9b8b2965f

Fixing #135; adjusted cache timeout value to 60 seconds.
author Brian Neal <bgneal@gmail.com>
date Tue, 11 Jan 2011 04:04:44 +0000
parents aef00df91165
children 767cedc7d12a
line wrap: on
line source
from socket import error as socket_error
import smtplib
import time

import django.core.mail

import mailer.models


def enqueue_mail(subject, message, from_email, recipient_list):
    """Creates mailer mail queue entries for the given email."""

    if len(subject) > mailer.models.MAX_SUBJECT:
        subject = u'%s...' % subject[:mailer.models.MAX_SUBJECT - 3]

    for recipient in recipient_list:
        mailer.models.Message(
                from_address=from_email,
                to_address=recipient,
                subject=subject,
                body=message).save()


def send_queued_mail():
    """Reads the queued messages from the database, sends them, and removes them
    from the queue."""

    sent, errors = 0, 0

    import logging
    logging.debug("Sending queued mail...")
    start_time = time.time()

    msgs = mailer.models.Message.objects.all()
    for msg in msgs:
        try:
            django.core.mail.send_mail(
                    msg.subject, 
                    msg.body, 
                    msg.from_address, 
                    [msg.to_address],
                    fail_silently=False)
        except (socket_error, smtplib.SMTPException), e:
            errors += 1
            logging.error("Error sending queued mail: %s" % e)
        else:
        	sent += 1
        	msg.delete()

    end_time = time.time()
    logging.debug("Sent queued mail: %d successful, %d error(s); elapsed time: %.2f" % (
        sent, errors, end_time - start_time))