Comment configurer Emacs smtp pour utiliser un serveur sécurisé (gmail)

9

Il s'agit d'une question initialement posée sur https://answers.launchpad.net/vm/+question/108267 le 2010-04-26.

Il demande comment configurer les paquets d'envoi de courrier Emacs sur MS Windows pour une utilisation avec un serveur SMTP sécurisé tel que gmail, qui nécessite TLS et STARTTLS. La question d'origine est copiée ci-dessous.


  • J'ai installé des gnutls Cygwins.

  • Dans .emacs a écrit:

    (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)
  • J'ai créé le fichier "~ / .authinfo" avec les informations d'identification gmail.

  • J'ai supprimé starttls.elc, donc la version compilée ne sera pas chargée par emacs.

  • Je l' ai remplacé (signal-process (process-id process) 'SIGALRM)à

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

J'ai utilisé la description de: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Lorsque j'essaie d'envoyer le courrier, il dit dans le mini-tampon: "Envoi d'une erreur SMTP ayant échoué"

Dans le tampon de débogage, j'obtiens une erreur:

'Process SMTP exited abnormally with code 53'

cela ne me dit rien d'utile.

Uday Reddy
la source

Réponses:

4

Voici des conseils qui ont conduit à la question du moment. L'avis a été découvert par Uday Reddy et peut être trouvé à http://article.gmane.org/gmane.emacs.windows/3250 . Il est daté du 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)))

Selon la documentation de gnutsl-cli (par exemple http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

C'est le "se connecter, établir une session ordinaire et démarrer tls." option. La session TLS sera lancée lors de la réception de l'EOF ou d'un SIGALRM.

Le bogue n ° 7789, abordé dans le groupe de discussion gnu.emacs.bug, signale cette déficience de signalisation dans MS Windows (alias Woe32).

J'ai également suivi les conseils pour effectuer cette modification (dans la fonction "starttls-Negotiate-gnutls" du fichier "starttls.el") mais je n'ai toujours pas réussi à envoyer un e-mail de test via le serveur smtp.gmail.com:587.

J'ai déterminé qu'un correctif consiste à modifier la ligne dans la fonction "smtpmail-via-smtp" dans le fichier "smtpmail.el" qui se lit comme suit:

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

à

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

Cela garantit qu'aucune conversion de codage n'a lieu lorsque la réponse du serveur est insérée dans "tampon de processus". En particulier, il garantit que la paire de caractères CRLF à la fin du message d'accueil 220 du serveur ne sera pas modifiée.

Avec cette modification supplémentaire, j'ai réussi à envoyer un e-mail de test via smtp.gmail.com:587.

Mes informations de version Emacs sont "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) du 10/03/2011 sur 3249CTO".

J'ai constaté plus tard que mon correctif est couvert par la discussion sur http://comments.gmane.org/gmane.emacs.devel/140976 . Le titre général de cette discussion est "Changer la valeur par défaut pour" send-mail-function "" (elle a commencé le 26/06/11). Les modifications discutées ici - qui apportent le correctif - sont entrées dans Emacs 24, mais ne sont pas présentes dans Emacs 23.3 ou 23.4.

Alan Wehmann
la source
En étudiant comment envoyer des e-mails depuis Emacs via smtp.gmail.com, une autre solution consistait à utiliser "stunnel" de Cygwin de la même manière que VM l'utilisait pour se connecter, par exemple, à un serveur POP. J'ai modifié la fonction "smtpmail-via-smtp" dans "smtpmail.el" afin qu'elle utilise "stunnel" de cette manière et réussisse à envoyer des e-mails de test via "smtp.gmail.com:465". Pour référence, voir [ stackoverflow.com/q/9694912/1264870] (Lecture des e-mails depuis la machine virtuelle Emacs à l'aide d'un serveur sécurisé (Gmail) [fermé]).
Alan Wehmann
11

Il semble qu'Emacs 24 (actuellement en pré-version) ait apporté plusieurs améliorations et que les choses soient beaucoup plus simples. Tout d'abord, la smtpmailbibliothèque peut désormais faire du SSL simple. Il n'est pas nécessaire de STARTTLS. Et, gmail SMTP prend en charge SSL sur le port 465.

Voici donc les paramètres requis:

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

Les informations d'authentification (identifiant et mot de passe) doivent être stockées dans un fichier ~ / .authinfo ou ~ / .authinfo.gpg. (Ils ne peuvent plus être mis dans des variables Emacs.) Là, vous devez inclure une ligne du formulaire

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

C'est tout ce qu'il y a à faire.

Uday Reddy
la source