diff --git a/django_mailbox/management/commands/processincomingmessage.py b/django_mailbox/management/commands/processincomingmessage.py index 15d8b7b..77c9788 100644 --- a/django_mailbox/management/commands/processincomingmessage.py +++ b/django_mailbox/management/commands/processincomingmessage.py @@ -1,14 +1,28 @@ import email -import ipdb +import logging +import rfc822 import sys -from django.core.managemet.base import BaseCommand +from django.core.management.base import BaseCommand -from django_mailbox.models import Mailbox, Message +from django_mailbox.models import Mailbox + +logger = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO) class Command(BaseCommand): def handle(self, *args, **options): - message_string = open(sys.stdin, 'r').read() - ipdb.set_trace() - #message = email.message_from_string(message_string) + message = email.message_from_string(sys.stdin.read()) + if message: + mailbox = self.get_mailbox_for_message(message) + mailbox.process_incoming_message(message) + logger.info("Message received from %s" % message['from']) + else: + logger.warning("Message not processable.") + def get_mailbox_for_message(self, message): + email_address = rfc822.parseaddr(message['from'][1][0:255]) + mailbox, created = Mailbox.objects.get_or_create( + name=email_address, + ) + return mailbox diff --git a/django_mailbox/models.py b/django_mailbox/models.py index f293850..30d697b 100755 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -89,19 +89,23 @@ class Mailbox(models.Model): conn = MMDFTransport(self.location) return conn + def process_incoming_message(self, message): + msg = Message() + msg.mailbox = self + msg.subject = message['subject'][0:255] + msg.message_id = message['message-id'][0:255] + msg.from_address = rfc822.parseaddr(message['from'])[1][0:255] + msg.body = message.as_string() + msg.save() + message_received.send(sender=self, message=msg) + return msg + def get_new_mail(self): connection = self.get_connection() new_mail = [] for message in connection.get_message(): - msg = Message() - msg.mailbox = self - msg.subject = message['subject'][0:255] - msg.message_id = message['message-id'][0:255] - msg.from_address = rfc822.parseaddr(message['from'])[1][0:255] - msg.body = message.as_string() - msg.save() + msg = self.process_incoming_message(message) new_mail.append(msg) - message_received.send(sender=self, message=msg) return new_mail def __unicode__(self):