modoboa-webmail
modoboa-webmail copied to clipboard
Add STARTTLS to imap
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
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"
}
},
{
Indeed, it would be great but Modoboa is not compatible with Python 3 yet...
+1
Now that python 3 support is on the way, maybe it's time to reconsider this patch ;)
This gist could be helpul for Python2: https://gist.github.com/manuel-io/438c20d2f040ee797388.