无法使用OfflineIMAP同步Gmail


10

我正在尝试设置OfflineIMAP以将我的Gmail帐户同步到~/Mail/Gmail。我~/.offlineimaprc这里开始使用一个非常基本的东西。但是OfflineIMAP根本无法连接到Gmail。这是我得到的调试消息(通过将OfflineIMAP运行为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

一开始我以为这可能是由于ISP的阻塞imap.gmail.com/imap.googlemail.com,但是我可以使用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 '^]'.

有任何想法吗?

编辑1:SuperUser的此答案中,我尝试imap.googlemail.com使用通过SSL 连接openssl s_client -connect imap.googlemail.com:993。这给了我:

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
---

这看起来像OpenSSL中缺少证书问题。脱机IMAP也会发生同样的情况吗?

编辑2:我在运行Mandriva Linux版本2009.1的另一台服务器(位于同一网络上)上尝试了相同的OpenSSL命令,并且显然连接正常(调试输出)。我正在运行带有OpenSSL / LibSSL 1.0.1-4ubuntu5.5的Ubuntu 12.04。这可能与发行相关吗?


这可能有助于发布您的offlineimap版本,因为该项目有很多版本,其中一些版本已严重损坏。也可以尝试他们的邮件列表,您可以在其主页上找到其信息。
jw013 2012年

Answers:


12

无需手动指定指纹(可以更改),而是可以告诉offlineimap本地系统证书的存储位置,然后让它自动验证链。

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

sslcacertfile可以解决问题。

如果非Ubuntu用户看到此消息,请记住,发行版上的位置很可能与其他位置不同。


4
任何想法sslcacertfile在OSX 上的路径在哪里?
米瑟姆(Meitham)2014年

1
sslcacertfile = /usr/local/etc/openssl/cert.pem根据rudolfochrist.github.io/blog/2015/03/21/…,@ Meitham看起来像。
tekknolagi '16

1

您应将以下行添加到.offlineimaprc中描述您的远程Gmail帐户的部分:

cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1

这是Gmail imap服务器的SSL证书。


0

不,不是OpenSSL缺少证书,而是SSL握手失败,因为另一端未发送其证书。

当您连接到某些未启用SSL的服务时,也会收到类似的错误。

将-debug选项添加到openssl会得到什么?

回答:

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

因此它没有从套接字读取任何内容(建议它在发送任何内容之前被另一端或介于两者之间关闭)

您的网络上是否存在某种代理?某种iptables重定向或本地计算机上的防病毒软件?

tshark -Vi any port 993尝试openssl命令时,您会得到什么?


谢谢!这是使用-debug选项运行OpenSSL的结果。显然,我能够从同一网络上的另一台服务器进行连接。我现在认为这可能是特定于发行版的。我也更新了我的问题。
tirmm'9
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.