1
0
Fork 0

Office365Transport properties

This commit is contained in:
Pietro Mingo 2022-07-27 10:21:02 +02:00
parent b37fa6e08d
commit f44eb3036f
9 changed files with 142 additions and 24 deletions

3
.idea/.gitignore generated vendored Normal file
View file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

14
.idea/django-mailbox.iml generated Normal file
View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
<option name="format" value="PLAIN" />
<option name="myDocStringFormat" value="Plain" />
</component>
</module>

View file

@ -0,0 +1,41 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="28">
<item index="0" class="java.lang.String" itemvalue="pyfcm" />
<item index="1" class="java.lang.String" itemvalue="qrcode" />
<item index="2" class="java.lang.String" itemvalue="python-dateutil" />
<item index="3" class="java.lang.String" itemvalue="django-stdimage" />
<item index="4" class="java.lang.String" itemvalue="psycopg2-binary" />
<item index="5" class="java.lang.String" itemvalue="xhtml2pdf" />
<item index="6" class="java.lang.String" itemvalue="requests" />
<item index="7" class="java.lang.String" itemvalue="django-mailbox" />
<item index="8" class="java.lang.String" itemvalue="redis" />
<item index="9" class="java.lang.String" itemvalue="fbmq" />
<item index="10" class="java.lang.String" itemvalue="jdcal" />
<item index="11" class="java.lang.String" itemvalue="celery" />
<item index="12" class="java.lang.String" itemvalue="bleach" />
<item index="13" class="java.lang.String" itemvalue="ics" />
<item index="14" class="java.lang.String" itemvalue="djangorestframework" />
<item index="15" class="java.lang.String" itemvalue="django-cors-headers" />
<item index="16" class="java.lang.String" itemvalue="djangorestframework-jwt" />
<item index="17" class="java.lang.String" itemvalue="reportlab" />
<item index="18" class="java.lang.String" itemvalue="et-xmlfile" />
<item index="19" class="java.lang.String" itemvalue="gunicorn" />
<item index="20" class="java.lang.String" itemvalue="python-telegram-bot" />
<item index="21" class="java.lang.String" itemvalue="python-memcached" />
<item index="22" class="java.lang.String" itemvalue="openpyxl" />
<item index="23" class="java.lang.String" itemvalue="Pillow" />
<item index="24" class="java.lang.String" itemvalue="google-cloud-logging" />
<item index="25" class="java.lang.String" itemvalue="Django" />
<item index="26" class="java.lang.String" itemvalue="six" />
<item index="27" class="java.lang.String" itemvalue="urllib3" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>

View file

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (django-mailbox)" project-jdk-type="Python SDK" />
<component name="PyCharmProfessionalAdvertiser">
<option name="shown" value="true" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/django-mailbox.iml" filepath="$PROJECT_DIR$/.idea/django-mailbox.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View file

@ -189,6 +189,30 @@ class Mailbox(models.Model):
return None
return folder[0]
@property
def client_id(self):
"""Returns (if specified) the client id for Office365."""
client_id = self._query_string.get('client_id', None)
if not client_id:
return None
return client_id[0]
@property
def client_secret(self):
"""Returns (if specified) the client secret for Office365."""
client_secret = self._query_string.get('client_secret', None)
if not client_secret:
return None
return client_secret[0]
@property
def tenant_id(self):
"""Returns (if specified) the tenant id for Office365."""
tenant_id = self._query_string.get('tentant_id', None)
if not tenant_id:
return None
return tenant_id[0]
def get_connection(self):
"""Returns the transport instance for this mailbox.
@ -224,7 +248,14 @@ class Mailbox(models.Model):
)
conn.connect(self.username, self.password)
elif self.type == 'office365':
conn = Office365Transport(self.location)
conn = Office365Transport(
port=self.port if self.port else None,
ssl=True,
archive=self.archive,
client_id=self.client_id,
client_secret=self.client_secret,
tenant_id=self.tenant_id
)
conn.connect(self.username, self.password)
elif self.type == 'maildir':
conn = MaildirTransport(self.location)

View file

@ -11,7 +11,7 @@ logger = logging.getLogger(__name__)
class Office365Transport(EmailTransport):
def __init__(
self, hostname, port=None, ssl=False, tls=False,
archive='', folder=None,
archive='', folder=None, client_id=None, client_secret=None, tenant_id=None
):
self.max_message_size = getattr(
settings,
@ -23,30 +23,32 @@ class Office365Transport(EmailTransport):
'DJANGO_MAILBOX_INTEGRATION_TESTING_SUBJECT',
None
)
# self.hostname = hostname
# self.port = port
# self.archive = archive
# 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
self.hostname = hostname
self.port = port
self.archive = archive
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
self.client_id = client_id
self.client_secret = client_secret
self.tenant_id = tenant_id
def connect(self, username, password):
# self.server = self.transport(self.hostname, self.port)
# if self.tls:
# self.server.starttls()
# typ, msg = self.server.login(username, password)
#
# if self.folder:
# self.server.select(self.folder)
# else:
# self.server.select()
credentials = (self.client_id, self.client_secret)
# the default protocol will be Microsoft Graph
# the default authentication method will be "on behalf of a user"
self.server = O365.Account(credentials, auth_flow_type='credentials', tenant_id=self.tenant_id)
if self.server.authenticate(scopes=['mailbox']):
print('Authenticated!')
def _get_all_message_ids(self):
# # Fetch all the message uids