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

8

Esta é uma pergunta originalmente feita no link em 2010-04-26.

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 exige TLS e STARTTLS. A pergunta original é copiada abaixo.

  • Instalei o Cygwins gnutls.

  • 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 as credenciais do Gmail.

  • Eu removi starttls.elc, então a versão compilada não será carregada pelo emacs.

  • Substitui (signal-process (process-id process) 'SIGALRM) para

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

Eu usei a descrição de: link

  • Quando tento enviar o e-mail, ele diz no minibuffer: "Enviando falha no erro SMTP"

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

'Process SMTP exited abnormally with code 53'

isso não me diz nada de útil.

    
por Uday Reddy 14.03.2012 / 10:37

2 respostas

4

O seguinte é um conselho que levou à questão do momento. O conselho foi desenterrado por Uday Reddy e pode ser encontrado no link . Data de 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, link ):

starttls option (-s)

This is the "connect, establish a plain session and start tls." option. The TLS session will be initiated when EOF or a SIGALRM is received.

Bug # 7789, discutido no newsgroup 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 pelo 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 é inserida no "buffer de 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 por meio de smtp.gmail.com:587.

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

Mais tarde, descobri que minha correção é abordada na discussão no link . O título geral dessa discussão é "Alterando o padrão para 'send-mail-function'" (começou 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.

    
por 15.03.2012 / 18:29
10

Parece que o Emacs 24 (atualmente em pré-lançamento) fez várias melhorias e as coisas são bem mais simples. Primeiro de tudo, a biblioteca smtpmail agora pode fazer 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 que existe para isso.

    
por 17.03.2012 / 19:50