Jak skonfigurować Emacsa smtp do korzystania z bezpiecznego serwera (Gmail)

9

To pytanie zostało pierwotnie postawione na https://answers.launchpad.net/vm/+question/108267 w dniu 26.04.2010.

Pyta, w jaki sposób należy skonfigurować pakiety wysyłania poczty Emacsa w systemie MS Windows do użytku z bezpiecznym serwerem SMTP, takim jak Gmail, które wymagają TLS i STARTTLS. Oryginalne pytanie zostało skopiowane poniżej.


  • Zainstalowałem gnutle Cygwins.

  • W .emacs napisał:

    (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)
    
  • Utworzyłem plik „~ / .authinfo” z danymi uwierzytelniającymi Gmaila.

  • Usunąłem starttls.elc, więc skompilowana wersja nie będzie ładowana przez emacsa.

  • Zamieniłem (signal-process (process-id process) 'SIGALRM)na

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

Użyłem opisu z: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Kiedy próbuję wysłać wiadomość, w minibuforze jest napisane: „Błąd wysyłania nie powiódł się SMTP”

W buforze debugowania pojawia się błąd:

'Process SMTP exited abnormally with code 53'

to nic mi nie mówi.

Uday Reddy
źródło

Odpowiedzi:

4

Oto porady, które doprowadziły do ​​pytania w tej chwili. Porada została odkryta przez Uday Reddy i można ją znaleźć na stronie http://article.gmane.org/gmane.emacs.windows/3250 . Jest datowany na 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)))

Zgodnie z dokumentacją gnutsl-cli (np. Http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Jest to „połącz, ustanów zwykłą sesję i uruchom tls”. opcja. Sesja TLS zostanie zainicjowana po otrzymaniu EOF lub SIGALRM.

Błąd # 7789, omawiany w grupie dyskusyjnej gnu.emacs.bug, zgłasza ten brak sygnalizacyjny w MS Windows (alias Woe32).

Postępowałem zgodnie z radą, aby wprowadzić tę zmianę (w funkcji „starttls-negocjate-gnutls” w pliku „starttls.el”), ale nadal nie udało mi się wysłać testowego e-maila za pośrednictwem serwera smtp.gmail.com:587.

Ustaliłem, że poprawką jest zmiana wiersza w funkcji „smtpmail-via-smtp” w pliku „smtpmail.el”, który brzmi:

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

do

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

Zapewnia to, że konwersja kodowania nie nastąpi, gdy odpowiedź serwera zostanie wstawiona do „bufora procesu”. W szczególności zapewnia, że ​​para znaków CRLF na końcu 220 powitania z serwera nie zostanie zmieniona.

Dzięki tej dodatkowej zmianie udało mi się wysłać testową wiadomość e-mail za pośrednictwem smtp.gmail.com:587.

Moje informacje o wersji Emacsa to „GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) z dnia 2011-03-10 na 3249CTO”.

Później odkryłem, że moja poprawka została omówiona na stronie http://comments.gmane.org/gmane.emacs.devel/140976 . Ogólny tytuł tej dyskusji brzmi „Zmiana domyślnej funkcji„ send-mail-function ”” (rozpoczęła się 26.06.11). Omówione tam zmiany - które wprowadzają poprawkę - wprowadziły Emacsa 24, ale nie są obecne w Emacsie 23.3 lub 23.4.

Alan Wehmann
źródło
Podczas sprawdzania, jak wysyłać wiadomości e-mail z Emacsa za pośrednictwem smtp.gmail.com, innym rozwiązaniem było użycie „stunnel” z Cygwin w taki sam sposób, w jaki VM używa go do łączenia się np. Z serwerem POP. Zmodyfikowałem funkcję „smtpmail-via-smtp” w „smtpmail.el”, tak że użyłem „stunnel” w ten sposób i udało mi się wysłać testową wiadomość przez „smtp.gmail.com:465”. W celach informacyjnych zobacz [ stackoverflow.com/q/9694912/1264870] (Odczytywanie wiadomości e-mail z maszyny Emacs VM przy użyciu bezpiecznego serwera (Gmail) [zamknięty]).
Alan Wehmann
11

Wygląda na to, że Emacs 24 (obecnie w wersji wstępnej) wprowadził kilka ulepszeń, a sprawy są o wiele prostsze. Przede wszystkim smtpmailbiblioteka może teraz obsługiwać zwykły protokół SSL. STARTTLS nie jest potrzebny. I Gmail SMTP obsługuje protokół SSL na porcie 465.

Oto więc wymagane ustawienia:

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

Dane uwierzytelniające (login i hasło) powinny znajdować się w pliku ~ / .authinfo lub ~ / .authinfo.gpg. (Nie można ich już umieszczać w zmiennych Emacsa.) Tam należy dołączyć wiersz formularza

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

To wszystko.

Uday Reddy
źródło