Проблема с открытием сервера gmail nnimap в Emacs gnus в Windows

Я пытаюсь использовать Emacs gnus для подключения к своей учетной записи gmail. Это соответствующий код конфигурации, взятый в основном отсюда:

(setq tls-program '("openssl s_client -CAfile C:/Users/GGustafson/gmail.crt -connect %h:%p -no_ssl2 -ign_eof"))

(setq gnus-select-method '(nnimap "gmail"
  (nnimap-address "imap.gmail.com")  
  (nnimap-server-port 993)
  (nnimap-stream ssl)
  (nnimap-authinfo-file "~/.authinfo")))

(setq message-send-mail-function 'smtpmail-send-it
 smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
  smtpmail-auth-credentials '(("smtp.gmail.com" 587 "[email protected]" nil))
  smtpmail-default-smtp-server "smtp.gmail.com"
  smtpmail-smtp-server "smtp.gmail.com"
  smtpmail-smtp-service 587)

Когда я перезагружаюсь, запускаю emacs и делаю M-x gnus, я получаю эти *Messages*:

Opening connection to imap.gmail.com via tls...
gnutls.c: [1] (Emacs) GnuTLS library not found
Opening TLS connection to `imap.gmail.com'...
Opening TLS connection with `openssl s_client -CAfile C:/Users/GGustafson/gmail.crt -connect imap.gmail.com:993 -no_ssl2 -ign_eof'...done
Opening TLS connection to `imap.gmail.com'...done
nnimap (gmail) open error: 'depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority^M
'.  Continue? (y or n)  y

Что именно здесь происходит? Раньше у меня было несколько ошибок verify error:num=20:unable to get local issuer certificate, но я исправил их с помощью следуя этим инструкциям, я добавил параметр -CAfile с копией соответствующего сертификата.

Чтобы подтвердить это, я могу сделать это:

C:\Users\GGustafson>openssl s_client -CAfile C:/Users/GGustafson/gmail.crt -connect imap.gmail.com:993 -no_ssl2 -ign_eof
CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = imap.gmail.com verify return:1
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=imap.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
****SNIP****
    Start Time: 1387083719
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
* OK Gimap ready for requests from 128.84.124.191 el7if9939594qeb.109

Чего мне не хватает, чтобы иметь возможность читать Gmail с помощью gnus? Я на Windows 7, использую Cygwin openssl.


person Gordon Gustafson    schedule 15.12.2013    source источник
comment
Попробуйте добавить -quiet к параметрам s_client.   -  person tripleee    schedule 17.12.2013


Ответы (2)


Одна вещь, которую мне нужно было сделать в Windows 7, чтобы подключиться к gmail из gnus, была:

;; So gnutls can find trustfiles on windows
(eval-after-load "gnutls"
'(progn
  (setq gnutls-trustfiles '("c:/cygwin/usr/ssl/certs/ca-bundle.trust.crt" "c:/cygwin/usr/ssl/certs/ca-bundle.crt"))))

В остальном установка аналогична:

(setq gnus-secondary-select-methods
      '(
    (nnimap "gmail"
           (nnimap-address "imap.gmail.com")
           (nnimap-server-port 993)
           (nnimap-stream ssl)
           (nnir-search-engine imap)
           (nnimap-authinfo-file "~/.authinfo")
           )
    (nntp "news.gmane.org")
    (nnfolder "archive"
      (nnfolder-directory   "~/Documents/Text/Gnus/Mail/archive")
      (nnfolder-active-file "~/Documents/Text/Gnus/Mail/archive/active")
      (nnfolder-get-new-mail nil)
      (nnfolder-inhibit-expiry t))))

Умеет читать почту нормально из gmail.

person Jeffrey DeLeo    schedule 17.12.2013
comment
Изначально я даже не использовал gnutls; как только я попробовал это вместо openssl, все заработало без дополнительной настройки. Однако предложение о gnutls-trustfiles кажется ценным и актуальным, поэтому +1. :) - person Gordon Gustafson; 18.12.2013
comment
Есть ли способ получить файлы доверия, кроме установки cygwin? - person sk8ingdom; 14.05.2015

Мне помогло использование порта gnutls для Windows вместо openssl, и удаление любых настроек tls-program. Emacs будет автоматически использовать двоичные файлы из gnutls, если они находятся на вашем пути, поскольку gnutls-cli — это первая программа, которая пытается использовать значения по умолчанию tls-program.

Я предлагаю использовать gnutls перед попыткой openssl, вероятно, он стоит первым в настройках по умолчанию по какой-то причине.

person Gordon Gustafson    schedule 18.12.2013
comment
Не могли бы вы рассказать подробнее о том, как удалить любую настройку tls-program? Я никогда не заставлял Gnus работать на Windows 7. - person ReneFroger; 24.10.2015
comment
@ReneFroger Не устанавливайте tls-program нигде в конфигурации emacs. Другими словами, оставьте значение по умолчанию. - person Gordon Gustafson; 24.10.2015