8

Этот вопрос изначально был задан по адресу 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'

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

2 ответа2

10

Похоже, что 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

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

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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .