[PATCH] imapserver.py: Implement STARTTLS

Sebastian Spaeth Sebastian at SSpaeth.de
Fri Jun 24 15:06:07 BST 2011

If we do not use a SSL connection anyway and if the server supports it,
authenticate automatically with STARTTLS.

Signed-off-by: Sebastian Spaeth <Sebastian at SSpaeth.de>
Here is a small patch against next which implements STARTTLS and changes
the Changelog draft.  I verified that I could connect via Starttls just
fine to my IMAP server so that patch is not totally broken.

I am not sure if we want to take feature additions such as this one now,
or if we want to postpone it until the nect merge cycle.

 Changelog.draft.rst       |    3 +++
 offlineimap/imapserver.py |   11 +++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/Changelog.draft.rst b/Changelog.draft.rst
index 3d20bcf..fecce26 100644
--- a/Changelog.draft.rst
+++ b/Changelog.draft.rst
@@ -13,6 +13,9 @@ others.
 New Features
+* Added StartTLS support, it will automatically be used if the server
+  supports it.
diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py
index 10492cd..a020193 100644
--- a/offlineimap/imapserver.py
+++ b/offlineimap/imapserver.py
@@ -233,11 +233,18 @@ class IMAPServer:
                         if not self.gssapi:
+                            if 'STARTTLS' in imapobj.capabilities and not\
+                                    self.usessl:
+                                self.ui.debug('imap',
+                                              'Using STARTTLS connection')
+                                imapobj.starttls()
                             if 'AUTH=CRAM-MD5' in imapobj.capabilities:
-                                                       'Attempting CRAM-MD5 authentication')
+                                           'Attempting CRAM-MD5 authentication')
-                                    imapobj.authenticate('CRAM-MD5', self.md5handler)
+                                    imapobj.authenticate('CRAM-MD5',
+                                                         self.md5handler)
                                 except imapobj.error, val:

More information about the OfflineIMAP-project mailing list