OfflineIMAP kann nicht zum Synchronisieren von Google Mail verwendet werden

10

Ich versuche, OfflineIMAP so einzurichten, dass mein Google Mail-Konto mit synchronisiert wird ~/Mail/Gmail. Ich benutze ein ziemlich einfaches ~/.offlineimaprcvon hier . OfflineIMAP stellt jedoch überhaupt keine Verbindung zu Google Mail her. Dies ist die Debug-Meldung, die ich erhalte (indem ich OfflineIMAP wie folgt ausführe offlineimap -o -d imap:

OfflineIMAP 6.3.4
Copyright 2002-2011 John Goerzen & contributors.
Licensed under the GNU GPL v2+ (v2 or any later version).

Debug mode: Forcing to singlethreaded.
Now debugging for imap: IMAP protocol debugging
Now debugging for : Other offlineimap related sync messages
Account sync Gmail:
***** Processing account Gmail
Copying folder structure from IMAP to Maildir
Establishing connection to imap.gmail.com:993.
DEBUG[imap]:   06:28.69 Account sync Gmail imaplib2 version 2.24
DEBUG[imap]:   06:28.69 Account sync Gmail imaplib2 debug level 5, buffer level 3
WARNING: Error occured attempting to sync account 'Gmail':
Traceback (most recent call last):
File "/usr/lib/pymodules/python2.7/offlineimap/accounts.py", line 177, in syncrunner
    self.sync()
File "/usr/lib/pymodules/python2.7/offlineimap/accounts.py", line 235, in sync
    remoterepos.syncfoldersto(localrepos, [statusrepos])
File "/usr/lib/pymodules/python2.7/offlineimap/repository/Base.py", line 124, in syncfoldersto
    srcfolders = src.getfolders()
File "/usr/lib/pymodules/python2.7/offlineimap/repository/IMAP.py", line 276, in getfolders
    imapobj = self.imapserver.acquireconnection()
File "/usr/lib/pymodules/python2.7/offlineimap/imapserver.py", line 323, in acquireconnection
    elif isinstance(e, socket.error) and e.args[0] == errno.ECONNREFUSED:
NameError: global name 'errno' is not defined

***** Finished processing account Gmail

Am Anfang dachte ich, dies könnte an meiner ISP-Blockierung liegen imap.gmail.com/imap.googlemail.com, aber ich kann eine Verbindung herstellen, indem ich telnet imap.googlemail.com 993:

telnet imap.googlemail.com 993
Trying 173.194.79.16...
Connected to googlemail-imap.l.google.com.
Escape character is '^]'.

Irgendwelche Ideen?

EDIT 1: Aus dieser Antwort auf SuperUser habe ich versucht, eine Verbindung imap.googlemail.comüber SSL mit herzustellenopenssl s_client -connect imap.googlemail.com:993 . Das gibt mir:

CONNECTED(00000003)
3078125768:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 226 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

Dies scheint ein Problem mit fehlenden Zertifikaten in OpenSSL zu sein. Könnte das auch mit OfflineIMAP passieren?

EDIT 2: Ich habe dieselben OpenSSL-Befehle auf einem anderen Server (im selben Netzwerk) ausprobiert, auf dem Mandriva Linux Release 2009.1 ausgeführt wird, und anscheinend hat die Verbindung funktioniert ( Debug-Ausgabe ). Ich verwende Ubuntu 12.04 mit OpenSSL / LibSSL 1.0.1-4ubuntu5.5. Könnte dies mit der Distribution zusammenhängen?

tirmm
quelle
Es kann hilfreich sein, Ihre Offlineimap-Version zu veröffentlichen, da dieses Projekt einige Versionen in freier Wildbahn hat und einige davon stark beschädigt sind. Probieren Sie auch ihre Mailingliste aus, deren Informationen Sie auf ihrer Homepage finden .
jw013

Antworten:

12

Anstatt den Fingerabdruck manuell anzugeben (der sich ändern kann), können Sie offlineimap stattdessen mitteilen, wo Ihre lokalen Systemzertifikate gespeichert sind, und dann die Kette automatisch überprüfen lassen.

[Repository somerepos-remote]
type = Gmail
sslcacertfile = /etc/ssl/certs/ca-certificates.crt

Die sslcacert-Datei macht den Trick.

Wenn Nicht-Ubuntu-Benutzer dies sehen, denken Sie daran, dass der Speicherort in Ihrer Distribution höchstwahrscheinlich anders ist.

Peter Hoeg
quelle
4
Irgendeine Idee, wo der sslcacertfilePfad unter OSX ist?
Meitham
1
@Meitham sieht sslcacertfile = /usr/local/etc/openssl/cert.pemlaut rudolfochrist.github.io/blog/2015/03/21/… aus .
Tekknolagi
1

Sie sollten dem Abschnitt in .offlineimaprc, der Ihr Remote-Google Mail-Konto beschreibt, die folgende Zeile hinzufügen:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

Dies ist das SSL-Zertifikat des Google Mail-IMAP-Servers.

Dima Pasechnik
quelle
0

Nein, OpenSSL fehlt kein Zertifikat. Es handelt sich um einen SSL-Handshake-Fehler, da das andere Ende sein Zertifikat nicht gesendet hat.

Sie würden einen ähnlichen Fehler erhalten, wenn Sie eine Verbindung zu einem nicht SSL-fähigen Dienst herstellen.

Was erhalten Sie, wenn Sie die Option -debug zu openssl hinzufügen?

Antworten:

read from 0x9cd8b98 [0x9cde140] (7 bytes => 0 (0x0))

Es wurde also nichts aus der Steckdose gelesen (was darauf hindeutet, dass es am anderen Ende oder etwas dazwischen geschlossen wurde, bevor etwas gesendet wurde)

Gibt es eine Art Proxy in Ihrem Netzwerk? Irgendeine Art von Iptables-Umleitung oder Antivirus auf dem lokalen Computer?

Was gibt es tshark -Vi any port 993, wenn Sie den Befehl openssl ausprobieren?

Stéphane Chazelas
quelle
Vielen Dank! Hier ist das Ergebnis der Ausführung von OpenSSL mit der -debugOption. Anscheinend kann ich eine Verbindung von einem anderen Server im selben Netzwerk herstellen. Ich denke jetzt, dass dies distro-spezifisch sein könnte. Ich habe auch meine Frage aktualisiert.
Tirmm