forked from mirror/django-mailbox
Office365Transport properties
This commit is contained in:
parent
b37fa6e08d
commit
f44eb3036f
9 changed files with 142 additions and 24 deletions
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
14
.idea/django-mailbox.iml
generated
Normal file
14
.idea/django-mailbox.iml
generated
Normal 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>
|
||||||
41
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
41
.idea/inspectionProfiles/Project_Default.xml
generated
Normal 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>
|
||||||
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal 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
7
.idea/misc.xml
generated
Normal 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
8
.idea/modules.xml
generated
Normal 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
6
.idea/vcs.xml
generated
Normal 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>
|
||||||
|
|
@ -189,6 +189,30 @@ class Mailbox(models.Model):
|
||||||
return None
|
return None
|
||||||
return folder[0]
|
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):
|
def get_connection(self):
|
||||||
"""Returns the transport instance for this mailbox.
|
"""Returns the transport instance for this mailbox.
|
||||||
|
|
||||||
|
|
@ -224,7 +248,14 @@ class Mailbox(models.Model):
|
||||||
)
|
)
|
||||||
conn.connect(self.username, self.password)
|
conn.connect(self.username, self.password)
|
||||||
elif self.type == 'office365':
|
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)
|
conn.connect(self.username, self.password)
|
||||||
elif self.type == 'maildir':
|
elif self.type == 'maildir':
|
||||||
conn = MaildirTransport(self.location)
|
conn = MaildirTransport(self.location)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ logger = logging.getLogger(__name__)
|
||||||
class Office365Transport(EmailTransport):
|
class Office365Transport(EmailTransport):
|
||||||
def __init__(
|
def __init__(
|
||||||
self, hostname, port=None, ssl=False, tls=False,
|
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(
|
self.max_message_size = getattr(
|
||||||
settings,
|
settings,
|
||||||
|
|
@ -23,30 +23,32 @@ class Office365Transport(EmailTransport):
|
||||||
'DJANGO_MAILBOX_INTEGRATION_TESTING_SUBJECT',
|
'DJANGO_MAILBOX_INTEGRATION_TESTING_SUBJECT',
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
# self.hostname = hostname
|
self.hostname = hostname
|
||||||
# self.port = port
|
self.port = port
|
||||||
# self.archive = archive
|
self.archive = archive
|
||||||
# self.folder = folder
|
self.folder = folder
|
||||||
# self.tls = tls
|
self.tls = tls
|
||||||
# if ssl:
|
if ssl:
|
||||||
# # self.transport = imaplib.IMAP4_SSL
|
#self.transport = imaplib.IMAP4_SSL
|
||||||
# if not self.port:
|
if not self.port:
|
||||||
# self.port = 993
|
self.port = 993
|
||||||
# else:
|
else:
|
||||||
# self.transport = imaplib.IMAP4
|
#self.transport = imaplib.IMAP4
|
||||||
# if not self.port:
|
if not self.port:
|
||||||
# self.port = 143
|
self.port = 143
|
||||||
|
self.client_id = client_id
|
||||||
|
self.client_secret = client_secret
|
||||||
|
self.tenant_id = tenant_id
|
||||||
|
|
||||||
def connect(self, username, password):
|
def connect(self, username, password):
|
||||||
# self.server = self.transport(self.hostname, self.port)
|
credentials = (self.client_id, self.client_secret)
|
||||||
# if self.tls:
|
|
||||||
# self.server.starttls()
|
# the default protocol will be Microsoft Graph
|
||||||
# typ, msg = self.server.login(username, password)
|
# the default authentication method will be "on behalf of a user"
|
||||||
#
|
|
||||||
# if self.folder:
|
self.server = O365.Account(credentials, auth_flow_type='credentials', tenant_id=self.tenant_id)
|
||||||
# self.server.select(self.folder)
|
if self.server.authenticate(scopes=['mailbox']):
|
||||||
# else:
|
print('Authenticated!')
|
||||||
# self.server.select()
|
|
||||||
|
|
||||||
def _get_all_message_ids(self):
|
def _get_all_message_ids(self):
|
||||||
# # Fetch all the message uids
|
# # Fetch all the message uids
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue