1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

fix and documentation

This commit is contained in:
Pietro Mingo 2022-08-01 15:03:11 +02:00
parent b39299692a
commit 9f314a38f2
3 changed files with 38 additions and 12 deletions

View file

@ -40,12 +40,15 @@ 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):
archive_folder = None
if self.archive: if self.archive:
self.mailbox.create_child_folder(self.archive) archive_folder = self.mailbox.get_folder(folder_name=self.archive)
if not archive_folder:
archive_folder = self.mailbox.create_child_folder(self.archive)
for message in self.mailbox.get_messages(order_by='receivedDateTime'): for o365message in self.mailbox_folder.get_messages(order_by='receivedDateTime'):
try: try:
mime_content = message.get_mime_content() mime_content = o365message.get_mime_content()
message = self.get_email_from_bytes(mime_content) message = self.get_email_from_bytes(mime_content)
if condition and not condition(message): if condition and not condition(message):
@ -55,9 +58,9 @@ class Office365Transport(EmailTransport):
except MessageParseError: except MessageParseError:
continue continue
if self.archive: if self.archive and archive_folder:
message.copy(self.archive) o365message.copy(archive_folder)
message.delete() o365message.delete()
return return

View file

@ -40,12 +40,15 @@ 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):
archive_folder = None
if self.archive: if self.archive:
self.mailbox.create_child_folder(self.archive) archive_folder = self.mailbox.get_folder(folder_name=self.archive)
if not archive_folder:
archive_folder = self.mailbox.create_child_folder(self.archive)
for message in self.mailbox.get_messages(order_by='receivedDateTime'): for o365message in self.mailbox_folder.get_messages(order_by='receivedDateTime'):
try: try:
mime_content = message.get_mime_content() mime_content = o365message.get_mime_content()
message = self.get_email_from_bytes(mime_content) message = self.get_email_from_bytes(mime_content)
if condition and not condition(message): if condition and not condition(message):
@ -55,9 +58,9 @@ class Office365Transport(EmailTransport):
except MessageParseError: except MessageParseError:
continue continue
if self.archive: if self.archive and archive_folder:
message.copy(self.archive) o365message.copy(archive_folder)
message.delete() o365message.delete()
return return

View file

@ -13,6 +13,7 @@ POP3 and IMAP as well as local file-based mailboxes.
POP3 ``pop3://`` Can also specify SSL with ``pop3+ssl://`` POP3 ``pop3://`` Can also specify SSL with ``pop3+ssl://``
IMAP ``imap://`` Can also specify SSL with ``imap+ssl://`` or STARTTLS with ``imap+tls``; additional configuration is also possible: see :ref:`pop3-and-imap-mailboxes` for details. IMAP ``imap://`` Can also specify SSL with ``imap+ssl://`` or STARTTLS with ``imap+tls``; additional configuration is also possible: see :ref:`pop3-and-imap-mailboxes` for details.
Gmail IMAP ``gmail+ssl://`` Uses OAuth authentication for Gmail's IMAP transport. See :ref:`gmail-oauth` for details. Gmail IMAP ``gmail+ssl://`` Uses OAuth authentication for Gmail's IMAP transport. See :ref:`gmail-oauth` for details.
Office365 API``office365://`` Uses OAuth authentication for Office365 API transport. See :ref:`office365-oauth` for details.
Maildir ``maildir://`` Maildir ``maildir://``
Mbox ``mbox://`` Mbox ``mbox://``
Babyl ``babyl://`` Babyl ``babyl://``
@ -115,6 +116,25 @@ Build your URI accordingly::
gmail+ssl://youremailaddress%40gmail.com:oauth2@imap.gmail.com?archive=Archived gmail+ssl://youremailaddress%40gmail.com:oauth2@imap.gmail.com?archive=Archived
.. _office365-oauth:
Office 365 API
-------------------------------------
Office 365 allows through the API to read a mailbox with Oauth.
The O365_ library is used.
.. _O365: https://github.com/O365/python-o365
.. _configuration: https://github.com/O365/python-o365#authentication
For the configuration_ you need to register an application and get a client_id, client_secret and tenant_id.
This implementation uses the client credentials grant flow and the password you specify will be ignored.
Build your URI accordingly::
office365://youremailaddress%40yourdomain.com:oauth2@outlook.office365.com?client_id=client_id&client_secret=client_secret&tenant_id=tenant_id&archive=Archived
Local File-based Mailboxes Local File-based Mailboxes
-------------------------- --------------------------