Як налаштувати smsp Emacs для використання захищеного сервера (gmail)


9

Це питання, спочатку поставлене на https://answers.launchpad.net/vm/+question/108267 2010-04-26.

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


  • Я встановив гвинти Cygwins.

  • В .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/

  • Коли я намагаюся надіслати пошту, в minibuffer написано: "Помилка надсилання SMTP"

У буфері налагодження я отримую помилку:

'Process SMTP exited abnormally with code 53'

це не говорить мені нічого корисного.

Відповіді:


4

Далі - поради, які призвели до питання про момент. Поради було знайдено Удай Редді, і їх можна знайти на веб-сайті http://article.gmane.org/gmane.emacs.windows/3250 . Він датований 8/7/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-обговорити-gnutls" у файлі "starttls.el"), але мені все ще не вдалося надіслати тестовий лист через сервер smtp.gmail.comwhat87.

Я визначив, що виправленням є зміна рядка у функції "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 в кінці привітання 220 з сервера не буде змінено.

З цією однією додатковою зміною мені вдалося надіслати тестове повідомлення електронною поштою через smtp.gmail.comwhat87.

Інформація про мою версію 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:265". Для ознайомлення див. [ Stackoverflow.com/q/9694912/1264870] (Читання електронної пошти від Emacs VM за допомогою захищеного сервера (Gmail) [закрито]).
Алан Веманн

11

Схоже, Emacs 24 (наразі знаходиться в попередньому випуску) зробив декілька вдосконалень, і все набагато простіше. Перш за все, smtpmailбібліотека тепер може робити звичайні SSL. СТАРТЛЮВАТИ не потрібно. І 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

Це все, що там є.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.