Cómo configurar Emacs smtp para usar un servidor seguro (gmail)

9

Esta es una pregunta planteada originalmente en https://answers.launchpad.net/vm/+question/108267 el 26/04/2010.

Pregunta cómo se deben configurar los paquetes de envío de correo de Emacs en MS Windows para usarlos con un servidor SMTP seguro como gmail, que requieren TLS y STARTTLS. La pregunta original se copia a continuación.


  • Instalé Cygwins gnutls.

  • En .emacs escribió:

    (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)
  • Creé el archivo "~ / .authinfo" con credenciales de gmail.

  • Eliminé starttls.elc, por lo que la versión compilada no será cargada por emacs.

  • Reemplacé (signal-process (process-id process) 'SIGALRM)a

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

Usé la descripción de: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Cuando trato de enviar el correo, dice en minibúfer: "Error de envío SMTP fallido"

En el búfer de depuración me sale un error:

'Process SMTP exited abnormally with code 53'

eso no me dice nada útil.

Uday Reddy
fuente

Respuestas:

4

El siguiente es un consejo que condujo a la pregunta del momento. El consejo fue descubierto por Uday Reddy y se puede encontrar en http://article.gmane.org/gmane.emacs.windows/3250 . Está fechado el 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 acuerdo con la documentación de gnutsl-cli (por ejemplo, http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Este es el "conectar, establecer una sesión simple e iniciar tls". opción. La sesión TLS se iniciará cuando se reciba EOF o un SIGALRM.

El error # 7789, discutido en el grupo de noticias gnu.emacs.bug, informa esta deficiencia de señalización en MS Windows (también conocido como Woe32).

También seguí los consejos para hacer este cambio (en la función "starttls-negotiate-gnutls" en el archivo "starttls.el") pero aún no tuve éxito al enviar un correo electrónico de prueba a través del servidor smtp.gmail.com:587.

Determiné que una solución es cambiar la línea en la función "smtpmail-via-smtp" en el archivo "smtpmail.el" que dice:

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

a

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

Esto asegura que no se produzca ninguna conversión de codificación cuando la respuesta del servidor se inserte en el "buffer de proceso". En particular, asegura que el par de caracteres CRLF al final del saludo 220 del servidor no se altere.

Con este cambio adicional, logré enviar un correo electrónico de prueba a través de smtp.gmail.com:587.

La información de mi versión de Emacs es "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) del 10/03/2011 en 3249CTO".

Más tarde descubrí que mi solución está cubierta por la discusión en http://comments.gmane.org/gmane.emacs.devel/140976 . El título general de esa discusión es "Cambiar el valor predeterminado para` send-mail-function '"(comenzó el 26/06/11). Los cambios discutidos allí, que hacen la solución, llegaron a Emacs 24, pero no están presentes en Emacs 23.3 o 23.4.

Alan Wehmann
fuente
Mientras investigaba cómo enviar correos electrónicos desde Emacs a través de smtp.gmail.com, otra solución era usar "stunnel" de Cygwin de la misma manera que VM lo usa para conectarse, por ejemplo, a un servidor POP. Modifiqué la función "smtpmail-via-smtp" en "smtpmail.el" para que utilizara "stunnel" de esta manera y tuviera éxito al enviar correos de prueba a través de "smtp.gmail.com:465". Para referencia, consulte [ stackoverflow.com/q/9694912/1264870] (Lectura de correo electrónico de Emacs VM usando un servidor seguro (Gmail) [cerrado]).
Alan Wehmann
11

Parece que Emacs 24 (actualmente en prelanzamiento) ha realizado varias mejoras y las cosas son mucho más simples. En primer lugar, la smtpmailbiblioteca ahora puede hacer SSL sin formato. No hay necesidad de STARTTLS. Y, gmail SMTP admite SSL en el puerto 465.

Entonces, aquí están las configuraciones requeridas:

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

Las credenciales de autenticación (inicio de sesión y contraseña) deben ir en un archivo ~ / .authinfo o ~ / .authinfo.gpg. (Ya no se pueden poner en las variables de Emacs). Allí, debe incluir una línea del formulario

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

Eso es todo lo que hay que hacer.

Uday Reddy
fuente