modoboa-webmail icon indicating copy to clipboard operation
modoboa-webmail copied to clipboard

Add STARTTLS to imap

Open tonioo opened this issue 10 years ago • 5 comments

From @Toniob on February 2, 2015 14:52

imaplib supports starttls since the version 3.2. It should be great to add this feature, like the one for smtp.

Copied from original issue: tonioo/modoboa#684

tonioo avatar Apr 29 '15 16:04 tonioo

From @Toniob on February 2, 2015 14:53

Here is a possible diff. It fallbacks to normal connection if the function is not available.

diff --git a/modoboa/extensions/webmail/app_settings.py b/modoboa/extensions/webmail/app_settings.py
index 70e3713..f11cfd5 100644
--- a/modoboa/extensions/webmail/app_settings.py
+++ b/modoboa/extensions/webmail/app_settings.py
@@ -25,10 +25,14 @@ class ParametersForm(AdminParametersForm):
         help_text=_("Address of your IMAP server")
     )

-    imap_secured = YesNoField(
-        label=_("Use a secured connection"),
-        initial="no",
-        help_text=_("Use a secured connection to access IMAP server")
+    imap_secured_mode = forms.ChoiceField(
+        label=_("Secured connection mode"),
+        choices=[("none", _("None")),
+                 ("starttls", "STARTTLS"),
+                 ("ssl", "SSL/TLS")],
+        initial="none",
+        help_text=_("Use a secured connection to access IMAP server"),
+        widget=InlineRadioSelect
     )

     imap_port = forms.IntegerField(
diff --git a/modoboa/extensions/webmail/lib/imaputils.py b/modoboa/extensions/webmail/lib/imaputils.py
index 7d34a75..1144cd0 100644
--- a/modoboa/extensions/webmail/lib/imaputils.py
+++ b/modoboa/extensions/webmail/lib/imaputils.py
@@ -300,11 +300,16 @@ class IMAPconnector(object):
         if isinstance(passwd, unicode):
             passwd = passwd.encode("utf-8")
         try:
-            secured = parameters.get_admin("IMAP_SECURED")
-            if secured == "yes":
+            secmode = parameters.get_admin("IMAP_SECURED_MODE")
+            if secmode == "ssl":
                 self.m = imaplib.IMAP4_SSL(self.address, self.port)
             else:
                 self.m = imaplib.IMAP4(self.address, self.port)
+                if secmode == "starttls":
+                    try:
+                        self.m.starttls()
+                    except AttributeError, error:
+                        pass
         except (socket.error, imaplib.IMAP4.error, ssl.SSLError) as error:
             raise ImapError(_("Connection to IMAP server failed: %s" % error))

diff --git a/modoboa/lib/fixtures/demo.json b/modoboa/lib/fixtures/demo.json
index 737dff0..0993495 100644
--- a/modoboa/lib/fixtures/demo.json
+++ b/modoboa/lib/fixtures/demo.json
@@ -67,8 +67,8 @@
         "pk": 16,
         "model": "lib.parameter",
         "fields": {
-            "name": "webmail.IMAP_SECURED",
-            "value": "no"
+            "name": "webmail.IMAP_SECURED_MODE",
+            "value": "none"
         }
     },
     {

tonioo avatar Apr 29 '15 16:04 tonioo

Indeed, it would be great but Modoboa is not compatible with Python 3 yet...

tonioo avatar Apr 29 '15 16:04 tonioo

+1

basbebe avatar Jan 12 '16 13:01 basbebe

Now that python 3 support is on the way, maybe it's time to reconsider this patch ;)

Toniob avatar Sep 22 '17 08:09 Toniob

This gist could be helpul for Python2: https://gist.github.com/manuel-io/438c20d2f040ee797388.

tonioo avatar Sep 22 '17 09:09 tonioo