diff --git a/django_mailbox/models.py b/django_mailbox/models.py
index 5e81313..69666d4 100644
--- a/django_mailbox/models.py
+++ b/django_mailbox/models.py
@@ -12,7 +12,7 @@ class Mailbox(models.Model):
uri = models.CharField(
max_length=255,
help_text="""
- Start your URI with imap:// or pop3://.
+ Start your URI with imap://, imap+ssl://, pop3://, or pop3+ssl://.
Example: imap://myusername:mypassword@someserver
@@ -49,18 +49,27 @@ class Mailbox(models.Model):
@property
def type(self):
- return self._protocol_info.scheme.lower()
+ scheme = self._protocol_info.scheme.lower()
+ if '+' in scheme:
+ return scheme.split('+')[0]
+ return scheme
+
+ @property
+ def use_ssl(self):
+ return '+ssl' in self._protocol_info.scheme.lower()
def get_connection(self):
if self.type == 'imap':
conn = ImapMailEnumerator(
self.location,
- self.port if self.port else 143
+ port=self.port if self.port else None,
+ ssl=self.use_ssl
)
elif self.type == 'pop3':
conn = PopMailEnumerator(
self.location,
- self.port if self.port else 110
+ port=self.port if self.port else None,
+ ssl=self.use_ssl
)
conn.connect(self.username, self.password)
return conn
diff --git a/django_mailbox/transports.py b/django_mailbox/transports.py
index 05452a1..abed1ac 100644
--- a/django_mailbox/transports.py
+++ b/django_mailbox/transports.py
@@ -1,14 +1,22 @@
import email
-from imaplib import IMAP4
-from poplib import POP3
+from imaplib import IMAP4, IMAP4_SSL
+from poplib import POP3, POP3_SSL
class PopMailEnumerator(object):
- def __init__(self, hostname, port):
+ def __init__(self, hostname, port=None, ssl=False):
self.hostname = hostname
self.port = port
+ if ssl:
+ self.transport = POP3_SSL
+ if not self.port:
+ self.port = 995
+ else:
+ self.transport = POP3
+ if not self.port:
+ self.port = 110
def connect(self, username, password):
- self.server = POP3(self.hostname, self.port)
+ self.server = self.transport(self.hostname, self.port)
self.server.user(username)
self.server.pass_(password)
@@ -26,12 +34,20 @@ class PopMailEnumerator(object):
return
class ImapMailEnumerator(object):
- def __init__(self, hostname, port):
+ def __init__(self, hostname, port=None, ssl=False):
self.hostname = hostname
self.port = port
+ if ssl:
+ self.transport = IMAP4_SSL
+ if not self.port:
+ self.port = 993
+ else:
+ self.transport = IMAP4
+ if not self.port:
+ self.port = 143
def connect(self, username, password):
- self.server = IMAP4(self.hostname, self.port)
+ self.server = self.transport(self.hostname, self.port)
typ, msg = self.server.login(username, password)
self.server.select()