Gmailアカウントを~/Mail/Gmail
に同期するようにOfflineIMAPを設定しようとしています。 here のかなり基本的な~/.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での証明書の欠落の問題のように見えます。同じことがOfflineIMAPにも起こっているのでしょうか?
編集2:Mandriva Linuxリリース2009.1を実行している別のサーバー(同じネットワーク上)で同じOpenSSLコマンドを試しましたが、接続が機能したようです( デバッグ出力 )。 OpenSSL/LibSSL 1.0.1-4ubuntu5.5でUbuntu 12.04を実行しています。これはディストロに関連している可能性がありますか?
フィンガープリント(変更される可能性があります)を手動で指定する代わりに、ローカルシステム証明書が保存されている場所をofflineimapに通知して、チェーンを自動的に検証することができます。
[Repository somerepos-remote]
type = Gmail
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
Sslcacertfileがトリックです。
Ubuntu以外のユーザーがこれを確認している場合は、ディストリビューションで場所が異なる可能性が高いことに注意してください。
リモートGmailアカウントを説明する.offlineimaprcのセクションに次の行を追加する必要があります。
cert_fingerprint=f3043dd689a2e7dddfbef82703a6c65ea9b634c1
これはGmailのimapサーバーのSSL証明書です。
いいえ、それはOpenSSLが証明書を欠落していないのではなく、SSLハンドシェイクの失敗です。これは、もう一方の端が証明書を送信しなかったためです。
SSLが有効になっていないサービスに接続すると、同様のエラーが発生します。
Opensslに-debugオプションを追加すると何が得られますか?
回答:
read from 0x9cd8b98 [0x9cde140] (7 bytes => 0 (0x0))
したがって、ソケットからは何も読み取られません(何かを送信する前に、もう一方の端またはその間の何かによって閉じられていることを示唆しています)
ネットワーク上に何らかのプロキシがありますか?ローカルマシンでのiptablesのリダイレクトやウイルス対策のようなものですか?
Opensslコマンドを実行すると、tshark -Vi any port 993
は何を提供しますか?