From 5bdd3703f1579a34f2d6cf632e3cb92e1dd2a1cc Mon Sep 17 00:00:00 2001 From: Tre Hom Date: Tue, 24 Apr 2018 12:12:41 -0400 Subject: [PATCH] new setting to delete email from server; don't store duplicate emails; --- django_mailbox/management/commands/getmail.py | 12 +++++++++--- django_mailbox/transports/pop3.py | 8 +++++++- django_mailbox/utils.py | 5 +++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/django_mailbox/management/commands/getmail.py b/django_mailbox/management/commands/getmail.py index 31b2dbd..2d8d6a0 100644 --- a/django_mailbox/management/commands/getmail.py +++ b/django_mailbox/management/commands/getmail.py @@ -2,13 +2,18 @@ import logging from django.core.management.base import BaseCommand -from django_mailbox.models import Mailbox - +from django_mailbox.models import Mailbox, Message logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) +def message_not_in_database(message): + if Message.objects.filter(message_id__iexact=message['message-id']).exists(): + return False + return True + + class Command(BaseCommand): def handle(self, *args, **options): mailboxes = Mailbox.active_mailboxes.all() @@ -21,7 +26,8 @@ class Command(BaseCommand): 'Gathering messages for %s', mailbox.name ) - messages = mailbox.get_new_mail() + + messages = mailbox.get_new_mail(condition=message_not_in_database) for message in messages: logger.info( 'Received %s (from %s)', diff --git a/django_mailbox/transports/pop3.py b/django_mailbox/transports/pop3.py index 4601114..25e7613 100644 --- a/django_mailbox/transports/pop3.py +++ b/django_mailbox/transports/pop3.py @@ -2,6 +2,8 @@ import six from poplib import POP3, POP3_SSL +from django_mailbox import utils + from .base import EmailTransport, MessageParseError @@ -29,6 +31,8 @@ class Pop3Transport(EmailTransport): return '\r\n'.join(message_lines) def get_message(self, condition=None): + settings = utils.get_settings() + message_count = len(self.server.list()[1]) for i in range(message_count): try: @@ -43,6 +47,8 @@ class Pop3Transport(EmailTransport): yield message except MessageParseError: continue - self.server.dele(i + 1) + + if settings['delete_original_message']: + self.server.dele(i + 1) self.server.quit() return diff --git a/django_mailbox/utils.py b/django_mailbox/utils.py index 48e76be..b300a42 100644 --- a/django_mailbox/utils.py +++ b/django_mailbox/utils.py @@ -68,6 +68,11 @@ def get_settings(): settings, 'DJANGO_MAILBOX_default_charset', 'iso8859-1', + ), + 'delete_original_message': getattr( + settings, + 'DJANGO_MAILBOX_DELETE_ORIGINAL_MESSAGE', + True ) }