Emacs: управление паролями электронной почты в Gnus

Моя основная проблема сейчас заключается в том, что в gnus.el я установил несколько источников почты следующим образом:

(setq mail-sources
  '((pop :server "server.org"
     :port 995
     :user "[email protected]"
     :password "pAssWorD")

Я не хочу хранить пароли в таком простом текстовом файле. Я хочу:

  1. Храните пароли для почтовых источников Gnus в отдельном файле со строгими разрешениями и в зашифрованном виде с помощью gpg.
  2. При использовании Emacs введите фразу-пароль один раз, и эти пароли будут автоматически использоваться при получении почты.

Каков наиболее идиоматический/эффективный способ сделать это?

Меня также интересуют любые общие идеи об управлении паролями в Emacs, будь то просто их хранение где-то в зашифрованных файлах или управление ими для конкретных пакетов Emacs.

Версия Emacs: 24.0.97


person Mirzhan Irkegulov    schedule 26.03.2012    source источник
comment
вы можете поместить их ~/.authinfo файл и зашифровать его. gnus запрашивает ваш пароль только в первый раз, чтобы расшифровать его.   -  person kindahero    schedule 26.03.2012
comment
@kindhero: Чтобы зашифровать/расшифровать его автоматически, вы можете просто переименовать его в .authinfo.gpg.   -  person Daimrod    schedule 26.03.2012


Ответы (1)


Мне не удалось заставить файл .authinfo работать с POP3, поэтому я следовал Хранение ваших секретов в секрете в блоге (спасибо phils за ссылку). Я создал три файла в моем пути загрузки. секреты.эл:

(load-library "secrets.el.gpg")
(provide 'secrets)

секреты.el.gpg:

(setq password-alist
      '((:mbox1 . "pAsSwOrD")
        (:mbox2 . "correct horse battery staple")
        (:mbox3 . "qwfpgj")))

почта.эл:

(defun load-mail-passwords ()
  "Load passwords for mail sources from secrets.el.gpg"
  (require 'secrets)
  (setq mail-sources
    `((pop :server "pop.server.org"
           :port 995
           :user "[email protected]"
           :password ,(rest (assoc :mbox1 password-alist)))
      ))
  (setq smtpmail-auth-credentials `(("smtp.server.org" "465" "[email protected]"
                                     ,(rest (assoc :mbox1 password-alist))))))
(add-hook 'gnus-load-hook 'load-mail-passwords)

И я также поставил (load "~/.emacs.d/mail.el") в свой файл инициализации, потому что по какой-то причине моя папка ~/.emacs.d/ в пути загрузки не загружалась автоматически.

Обратная галочка похожа на апостроф (кавычку), но позволяет не заключать в кавычки некоторые выражения с помощью запятой. Комбинация (rest (assoc :keyword alist)) предназначена для получения второй части точечной пары в списке ассоциаций.

person Mirzhan Irkegulov    schedule 29.05.2012
comment
Как раз об этом вопрос. После запуска load-mail-passwords, если вы оцениваете C-h v password-alist, возвращает ли он пароли? Проблема, которую я вижу при таком подходе, заключается в том, что пароли сохраняются в переменной. - person Jonathan Leech-Pepin; 12.09.2012
comment
Правда, они заканчиваются в переменной. Я думаю только о 2 средствах. 1: (setq password-alist nil) после пароля больше не требуется. 2: создайте специальную форму типа (with-password ...), которая временно использует пароли. Что вы думаете? - person Mirzhan Irkegulov; 13.09.2012