1
0
Fork 0
django-mailbox/django_mailbox/transports/office365.py

83 lines
2.5 KiB
Python
Raw Normal View History

import O365
import logging
from django.conf import settings
from .base import EmailTransport, MessageParseError
logger = logging.getLogger(__name__)
class Office365Transport(EmailTransport):
def __init__(
2022-07-29 16:01:30 +02:00
self, hostname, username, port=None, ssl=False, tls=False, folder=None
):
self.max_message_size = getattr(
settings,
'DJANGO_MAILBOX_MAX_MESSAGE_SIZE',
False
)
self.integration_testing_subject = getattr(
settings,
'DJANGO_MAILBOX_INTEGRATION_TESTING_SUBJECT',
None
)
2022-07-27 10:21:02 +02:00
self.hostname = hostname
2022-07-29 16:01:30 +02:00
self.username = username
2022-07-27 10:21:02 +02:00
self.port = port
self.folder = folder
self.tls = tls
if ssl:
#self.transport = imaplib.IMAP4_SSL
if not self.port:
self.port = 993
else:
#self.transport = imaplib.IMAP4
if not self.port:
self.port = 143
2022-07-29 16:01:30 +02:00
def connect(self, client_id, client_secret, tenant_id):
credentials = (client_id, client_secret)
2022-07-29 16:01:30 +02:00
self.account = O365.Account(credentials, auth_flow_type='credentials', tenant_id=tenant_id)
self.account.authenticate()
2022-07-29 16:01:30 +02:00
self.mailbox = self.account.mailbox(resource=self.username)
self.mailbox_folder = self.mailbox.inbox_folder()
if self.folder:
self.mailbox_folder = self.mailbox.get_folder(folder_name=self.folder)
2022-07-29 16:01:30 +02:00
def get_message_body(self, message_lines):
return bytes('\r\n', 'ascii').join(message_lines)
2022-07-29 16:01:30 +02:00
def get_message(self, condition=None):
message_count = len(self.server.list()[1])
for i in range(message_count):
try:
2022-07-29 16:01:30 +02:00
msg_contents = self.get_message_body(
self.server.retr(i + 1)[1]
)
message = self.get_email_from_bytes(msg_contents)
if condition and not condition(message):
continue
yield message
except MessageParseError:
continue
2022-07-29 16:01:30 +02:00
self.server.dele(i + 1)
2022-07-29 16:01:30 +02:00
for message in self.mailbox.get_messages(order_by='receivedDateTime'):
try:
mime_content = message.get_mime_content()
message = self.get_email_from_string(mime_content)
if condition and not condition(message):
continue
2022-07-29 16:01:30 +02:00
yield message
except MessageParseError:
continue
return
2022-07-29 16:01:30 +02:00