Как настроить Emacs smtp для использования защищенного сервера (gmail)

9

Этот вопрос первоначально задавался по адресу https://answers.launchpad.net/vm/+question/108267 2010-04-26.

Он спрашивает, как настроить Emacs для отправки почтовых пакетов в MS Windows для использования с защищенным SMTP-сервером, таким как gmail, для которого требуются TLS и STARTTLS. Оригинальный вопрос скопирован ниже.


  • Я установил Cygwins Gnutls.

  • В .emacs писал:

    (setq send-mail-function 'smtpmail-send-it
      message-send-mail-function 'smtpmail-send-it
      smtpmail-starttls-credentials
      '(("smtp.gmail.com" 587 nil nil))
      smtpmail-auth-credentials
      (expand-file-name "~/.authinfo")
      smtpmail-default-smtp-server "smtp.gmail.com"
      smtpmail-smtp-server "smtp.gmail.com"
      smtpmail-smtp-service 587
      smtpmail-debug-info t)
    
    (require 'starttls)
    (setq starttls-use-gnutls t)
    (setq smtpmail-debug-info t)
    (setq smtpmail-debug-verb t)
    (require 'smtpmail)
  • Я создал файл "~ / .authinfo" с учетными данными Gmail.

  • Я удалил starttls.elc, поэтому скомпилированная версия не будет загружена emacs.

  • Я заменил (signal-process (process-id process) 'SIGALRM)на

    (call-process "g:\\www\\cygwin\\bin\\kill.exe" nil nil nil
              "-ALRM" (format "%d" (process-id process)))

Я использовал описание от: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Когда я пытаюсь отправить письмо, в минибуфере говорится: «Ошибка отправки SMTP»

В буфере отладки я получаю ошибку:

'Process SMTP exited abnormally with code 53'

это не говорит мне ничего полезного.

Удай Редди
источник

Ответы:

4

Ниже приведен совет, который привел к вопросу о моменте. Этот совет был раскопан Удаем Редди и может быть найден на http://article.gmane.org/gmane.emacs.windows/3250 . Датировано 7.08.2006.

The problem boils down to the fact that the command

(signal-process (process-id process) 'SIGALRM)

does not work with Win32 Emacs, even with Cygwin also installed.  But one can mimic that with:

(call-process "c:\\cygwin\\bin\\kill.exe" nil nil nil
                                     "-ALRM" (format "%d" (process-id 
process)))

В соответствии с документацией gnutsl-cli (например, http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Это «подключиться, установить простой сеанс и запустить TLS». вариант. Сеанс TLS будет инициирован при получении EOF или SIGALRM.

Ошибка № 7789, обсуждаемая на новостной группе gnu.emacs.bug, сообщает об этом недостатке сигнализации в MS Windows (он же Woe32).

Я также последовал совету сделать это изменение (в функции "starttls -gotiate-gnutls" в файле "starttls.el"), но мне все еще не удалось отправить тестовое электронное письмо через сервер smtp.gmail.com:587.

Я определил, что исправление заключается в изменении строки в функции "smtpmail-via-smtp" в файле "smtpmail.el", которая гласит:

(setq process (smtpmail-open-stream process-buffer host port))

в

(let ((coding-system-for-read 'raw-text-unix))
  (setq process (smtpmail-open-stream process-buffer host port)))

Это гарантирует, что преобразование кодирования не происходит, когда ответ сервера вставляется в «буфер процесса». В частности, это гарантирует, что пара символов CRLF в конце приветствия от сервера не будет изменена.

С этим дополнительным изменением мне удалось отправить тестовое электронное письмо по адресу smtp.gmail.com:587.

Информация о моей версии Emacs: «GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) от 2011-03-10 на 3249CTO».

Позже я обнаружил, что мое исправление описано в http://comments.gmane.org/gmane.emacs.devel/140976 . Общее название этого обсуждения: «Изменение значения по умолчанию для« send-mail-function »» (оно началось 26.06.11). Обсуждаемые там изменения, которые вносят исправления, включены в Emacs 24, но отсутствуют в Emacs 23.3 или 23.4.

Алан Веманн
источник
При исследовании того, как отправлять электронную почту из Emacs через smtp.gmail.com, другим решением было использование «stunnel» от Cygwin таким же образом, как VM использует его для подключения, например, к серверу POP. Я изменил функцию «smtpmail-via-smtp» в «smtpmail.el», чтобы она использовала «stunnel» таким образом и успешно отправляла тестовые письма через «smtp.gmail.com:465». Для справки см. [ Stackoverflow.com/q/9694912/1264870] (Чтение электронной почты с виртуальной машины Emacs с использованием защищенного сервера (Gmail) [закрыто]).
Алан Веманн
11

Похоже, что Emacs 24 (в настоящее время находится на предварительной версии) сделал несколько улучшений, и все намного проще. Прежде всего, smtpmailбиблиотека теперь может делать простой SSL. Нет необходимости в STARTTLS. И, gmail SMTP поддерживает SSL на порту 465.

Итак, вот необходимые настройки:

(setq smtpmail-stream-type 'ssl)
(setq smtpmail-smtp-server "smtp.gmail.com")
(setq smtpmail-smtp-service 465)

Учетные данные для аутентификации (логин и пароль) должны находиться в файле ~ / .authinfo или ~ / .authinfo.gpg. (Они больше не могут быть помещены в переменные Emacs.) Там вам нужно включить строку вида

machine smtp.gmail.com login ..... password ..... port 465

Это все, что нужно сделать.

Удай Редди
источник