Come configurare Emacs smtp per l'utilizzo di un server sicuro (gmail)


9

Questa è una domanda originariamente posta su https://answers.launchpad.net/vm/+question/108267 il 26-04-2010.

Chiede come si dovrebbero configurare i pacchetti di invio della posta Emacs su MS Windows per l'uso con server SMTP sicuri come Gmail, che richiedono TLS e STARTTLS. La domanda originale viene copiata di seguito.


  • Ho installato Cygwins gnutls.

  • In .emacs ha scritto:

    (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)
  • Ho creato il file "~ / .authinfo" con le credenziali di Gmail.

  • Ho rimosso starttls.elc, quindi la versione compilata non verrà caricata da emacs.

  • Ho sostituito (signal-process (process-id process) 'SIGALRM)a

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

Ho usato la descrizione da: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Quando provo a inviare la posta, nel minibuffer viene visualizzato il messaggio "Invio errore SMTP non riuscito"

Nel buffer di debug viene visualizzato un errore:

'Process SMTP exited abnormally with code 53'

questo non mi dice nulla di utile.

Risposte:


4

Quello che segue è un consiglio che ha portato alla domanda del momento. Il consiglio è stato scoperto da Uday Reddy e può essere trovato su http://article.gmane.org/gmane.emacs.windows/3250 . È datata 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)))

Secondo la documentazione di gnutsl-cli (ad es. Http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Questa è la "connessione, stabilire una sessione semplice e avviare tls". opzione. La sessione TLS verrà avviata quando si riceve EOF o SIGALRM.

Il bug # 7789, discusso nel newsgroup gnu.emacs.bug, segnala questa carenza di segnalazione in MS Windows (aka Woe32).

Ho anche seguito i consigli per apportare questa modifica (nella funzione "starttls-negoziaiate-gnutls" nel file "starttls.el") ma non ho ancora avuto successo nell'inviare un'email di prova tramite il server smtp.gmail.com:587.

Ho determinato che una correzione consiste nel modificare la riga nella funzione "smtpmail-via-smtp" nel file "smtpmail.el" che recita:

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

per

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

Ciò assicura che non avvenga alcuna conversione di codifica quando la risposta del server viene inserita in "buffer di processo". In particolare, garantisce che la coppia di caratteri CRLF alla fine del messaggio di saluto 220 dal server non venga modificata.

Con questo ulteriore cambiamento sono riuscito a inviare un'email di prova tramite smtp.gmail.com:587.

Le informazioni sulla versione di My Emacs sono "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) del 2011-03-10 su 3249CTO".

In seguito ho scoperto che la mia correzione è trattata dalla discussione su http://comments.gmane.org/gmane.emacs.devel/140976 . Il titolo generale di quella discussione è "Modifica del valore predefinito per la funzione" invia-mail "(è iniziato il 26/06/11). Le modifiche qui discusse - che rendono la correzione - sono state introdotte in Emacs 24, ma non sono presenti in Emacs 23.3 o 23.4.


Mentre studiavo come inviare e-mail da Emacs tramite smtp.gmail.com un'altra soluzione era quella di utilizzare lo "stunnel" di Cygwin nello stesso modo in cui la VM lo utilizza per connettersi ad esempio a un server POP. Ho modificato la funzione "smtpmail-via-smtp" in "smtpmail.el" in modo che usasse "stunnel" in questo modo e fosse riuscito a inviare messaggi di prova tramite "smtp.gmail.com:465". Per riferimento, consultare [ stackoverflow.com/q/9694912/1264870] (Lettura e-mail da Emacs VM utilizzando un server sicuro (Gmail) [chiuso]).
Alan Wehmann,

11

Sembra che Emacs 24 (attualmente in pre-release) abbia apportato numerosi miglioramenti e le cose sono molto più semplici. Prima di tutto, smtpmailora la libreria può eseguire semplici SSL. Non è necessario STARTTLS. E, Gmail SMTP supporta SSL sulla porta 465.

Quindi, ecco le impostazioni richieste:

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

Le credenziali di autenticazione (login e password) dovrebbero andare in un file ~ / .authinfo o ~ / .authinfo.gpg. (Non possono più essere inseriti nelle variabili Emacs.) Qui è necessario includere una riga del modulo

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

Questo è tutto ciò che c'è da fare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.