1
0
Fork 0

archive and delete

This commit is contained in:
Pietro Mingo 2022-08-01 12:39:09 +02:00
parent 1f6014918c
commit b39299692a
4 changed files with 21 additions and 6 deletions

View file

@ -251,6 +251,7 @@ class Mailbox(models.Model):
conn = Office365Transport( conn = Office365Transport(
self.location, self.location,
self.username, self.username,
archive=self.archive,
folder=self.folder folder=self.folder
) )
conn.connect(self.client_id, self.client_secret, self.tenant_id) conn.connect(self.client_id, self.client_secret, self.tenant_id)

View file

@ -9,7 +9,7 @@ logger = logging.getLogger(__name__)
class Office365Transport(EmailTransport): class Office365Transport(EmailTransport):
def __init__( def __init__(
self, hostname, username, folder=None self, hostname, username, archive='', folder=None
): ):
self.integration_testing_subject = getattr( self.integration_testing_subject = getattr(
settings, settings,
@ -18,6 +18,7 @@ class Office365Transport(EmailTransport):
) )
self.hostname = hostname self.hostname = hostname
self.username = username self.username = username
self.archive = archive
self.folder = folder self.folder = folder
def connect(self, client_id, client_secret, tenant_id): def connect(self, client_id, client_secret, tenant_id):
@ -39,6 +40,9 @@ class Office365Transport(EmailTransport):
self.mailbox_folder = self.mailbox.get_folder(folder_name=self.folder) self.mailbox_folder = self.mailbox.get_folder(folder_name=self.folder)
def get_message(self, condition=None): def get_message(self, condition=None):
if self.archive:
self.mailbox.create_child_folder(self.archive)
for message in self.mailbox.get_messages(order_by='receivedDateTime'): for message in self.mailbox.get_messages(order_by='receivedDateTime'):
try: try:
mime_content = message.get_mime_content() mime_content = message.get_mime_content()
@ -50,5 +54,10 @@ class Office365Transport(EmailTransport):
yield message yield message
except MessageParseError: except MessageParseError:
continue continue
if self.archive:
message.copy(self.archive)
message.delete()
return return

View file

@ -9,7 +9,7 @@ logger = logging.getLogger(__name__)
class Office365Transport(EmailTransport): class Office365Transport(EmailTransport):
def __init__( def __init__(
self, hostname, username, folder=None self, hostname, username, archive='', folder=None
): ):
self.integration_testing_subject = getattr( self.integration_testing_subject = getattr(
settings, settings,
@ -18,6 +18,7 @@ class Office365Transport(EmailTransport):
) )
self.hostname = hostname self.hostname = hostname
self.username = username self.username = username
self.archive = archive
self.folder = folder self.folder = folder
def connect(self, client_id, client_secret, tenant_id): def connect(self, client_id, client_secret, tenant_id):
@ -39,6 +40,9 @@ class Office365Transport(EmailTransport):
self.mailbox_folder = self.mailbox.get_folder(folder_name=self.folder) self.mailbox_folder = self.mailbox.get_folder(folder_name=self.folder)
def get_message(self, condition=None): def get_message(self, condition=None):
if self.archive:
self.mailbox.create_child_folder(self.archive)
for message in self.mailbox.get_messages(order_by='receivedDateTime'): for message in self.mailbox.get_messages(order_by='receivedDateTime'):
try: try:
mime_content = message.get_mime_content() mime_content = message.get_mime_content()
@ -47,12 +51,13 @@ class Office365Transport(EmailTransport):
if condition and not condition(message): if condition and not condition(message):
continue continue
#TODO: implement archive function
yield message yield message
except MessageParseError: except MessageParseError:
continue continue
# TODO: delete all messages if self.archive:
message.copy(self.archive)
message.delete()
return return

View file

@ -8,7 +8,7 @@
:target: https://pypi.python.org/pypi/django-mailbox :target: https://pypi.python.org/pypi/django-mailbox
Easily ingest messages from POP3, IMAP, Office365 or local mailboxes into your Django application. Easily ingest messages from POP3, IMAP, Office365 API or local mailboxes into your Django application.
This app allows you to either ingest e-mail content from common e-mail services (as long as the service provides POP3 or IMAP support), This app allows you to either ingest e-mail content from common e-mail services (as long as the service provides POP3 or IMAP support),
or directly receive e-mail messages from ``stdin`` (for locally processing messages from Postfix or Exim4). or directly receive e-mail messages from ``stdin`` (for locally processing messages from Postfix or Exim4).