Como configurar o Emacs smtp para usar um servidor seguro (gmail)

9

Esta é uma pergunta originalmente colocada em https://answers.launchpad.net/vm/+question/108267 em 26-04-2010.

Ele pergunta como se deve configurar os pacotes de envio de e-mail do Emacs no MS Windows para uso com o servidor SMTP seguro, como o gmail, que requer TLS e STARTTLS. A pergunta original é copiada abaixo.


  • Eu instalei os gnutls do Cygwins.

  • Em .emacs escreveu:

    (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)
    
  • Eu criei o arquivo "~ / .authinfo" com credenciais do Gmail.

  • Eu removi o starttls.elc, para que a versão compilada não seja carregada pelo emacs.

  • Eu substituí (signal-process (process-id process) 'SIGALRM)por

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

Eu usei a descrição em: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Quando tento enviar o e-mail, ele diz no minibuffer: "Erro ao enviar SMTP com falha"

No buffer de depuração, recebo um erro:

'Process SMTP exited abnormally with code 53'

isso não me diz nada de útil.

Uday Reddy
fonte

Respostas:

4

A seguir, conselhos que levaram à questão do momento. O conselho foi desenterrado por Uday Reddy e pode ser encontrado em http://article.gmane.org/gmane.emacs.windows/3250 . É datado 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)))

De acordo com a documentação do gnutsl-cli (por exemplo, http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Este é o "conectar, estabelecer uma sessão simples e iniciar tls". opção. A sessão TLS será iniciada quando o EOF ou um SIGALRM for recebido.

O bug # 7789, discutido no grupo de notícias gnu.emacs.bug, relata essa deficiência de sinalização no MS Windows (também conhecido como Woe32).

Também segui o conselho para fazer essa alteração (na função "starttls-negotiate-gnutls" no arquivo "starttls.el"), mas ainda não consegui enviar um email de teste por meio do servidor smtp.gmail.com:587.

Eu determinei que uma correção é alterar a linha na função "smtpmail-via-smtp" no arquivo "smtpmail.el" que diz:

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

para

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

Isso garante que nenhuma conversão de codificação ocorra quando a resposta do servidor for inserida no "buffer do processo". Em particular, garante que o par de caracteres CRLF no final da saudação 220 do servidor não seja alterado.

Com essa alteração adicional, consegui enviar um email de teste via smtp.gmail.com:587.

As informações da minha versão do Emacs são "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) de 10/03/2011 em 3249CTO".

Mais tarde, descobri que minha correção está coberta pela discussão em http://comments.gmane.org/gmane.emacs.devel/140976 . O título geral dessa discussão é "Alterando o padrão para` send-mail-function '"(iniciado em 26/06/11). As mudanças discutidas lá - que fazem a correção - chegaram ao Emacs 24, mas não estão presentes no Emacs 23.3 ou 23.4.

Alan Wehmann
fonte
Ao investigar como enviar email do Emacs via smtp.gmail.com, outra solução foi usar o "stunnel" do Cygwin da mesma maneira que a VM o usa para conectar-se a, por exemplo, um servidor POP. Modifiquei a função "smtpmail-via-smtp" em "smtpmail.el" para que ele usasse "stunnel" dessa maneira e conseguisse enviar e-mails de teste via "smtp.gmail.com:465". Para referência, consulte [ stackoverflow.com/q/9694912/1264870] (Lendo emails da Emacs VM usando um servidor seguro (Gmail) [fechado]).
27512 Alan Alan Wehmann
11

Parece que o Emacs 24 (atualmente em pré-lançamento) fez várias melhorias e as coisas são muito mais simples. Primeiro, a smtpmailbiblioteca agora pode executar SSL simples. Não há necessidade de STARTTLS. E, o SMTP do gmail suporta SSL na porta 465.

Então, aqui estão as configurações necessárias:

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

As credenciais de autenticação (login e senha) devem entrar em um arquivo ~ / .authinfo ou ~ / .authinfo.gpg. (Eles não podem mais ser colocados nas variáveis ​​do Emacs.) Lá, você precisa incluir uma linha do formulário

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

Isso é tudo o que existe.

Uday Reddy
fonte