So konfigurieren Sie Emacs SMTP für die Verwendung eines sicheren Servers (Google Mail)

9

Dies ist eine Frage, die ursprünglich am 26.04.2010 unter https://answers.launchpad.net/vm/+question/108267 gestellt wurde.

Es wird gefragt, wie Emacs Mail-Sendepakete unter MS Windows für die Verwendung mit sicheren SMTP-Servern wie Google Mail konfiguriert werden sollen, für die TLS und STARTTLS erforderlich sind. Die ursprüngliche Frage wird unten kopiert.


  • Ich habe Cygwins Gnutls installiert.

  • In .emacs schrieb:

    (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)
  • Ich habe eine "~ / .authinfo" -Datei mit Google Mail-Anmeldeinformationen erstellt.

  • Ich habe starttls.elc entfernt, damit die kompilierte Version nicht von Emacs geladen wird.

  • Ich ersetzte (signal-process (process-id process) 'SIGALRM)zu

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

Ich habe die Beschreibung verwendet von: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Wenn ich versuche, die E-Mail zu senden, heißt es im Minibuffer: "Senden eines fehlgeschlagenen SMTP-Fehlers"

Im Debug-Puffer erhalte ich eine Fehlermeldung:

'Process SMTP exited abnormally with code 53'

das sagt mir nichts nützliches.

Uday Reddy
quelle

Antworten:

4

Das Folgende ist ein Rat, der zur Frage des Augenblicks führte. Der Rat wurde von Uday Reddy ausgegraben und kann unter http://article.gmane.org/gmane.emacs.windows/3250 abgerufen werden . Es ist vom 07.08.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)))

Laut der Dokumentation von gnutsl-cli (z. B. http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Dies ist die "Verbindung herstellen, eine einfache Sitzung einrichten und tls starten". Möglichkeit. Die TLS-Sitzung wird gestartet, wenn EOF oder ein SIGALRM empfangen wird.

Der Fehler # 7789, der in der Newsgroup gnu.emacs.bug besprochen wurde, meldet diesen Signalisierungsmangel in MS Windows (auch bekannt als Woe32).

Ich habe auch den Rat befolgt, um diese Änderung vorzunehmen (in der Funktion "starttls-Verhandlungs-gnutls" in der Datei "starttls.el"), aber es ist mir immer noch nicht gelungen, eine Test-E-Mail über den Server smtp.gmail.com:587 zu senden.

Ich habe festgestellt, dass ein Fix darin besteht, die Zeile in der Funktion "smtpmail-via-smtp" in der Datei "smtpmail.el" zu ändern, die lautet:

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

zu

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

Dies stellt sicher, dass keine Codierungskonvertierung stattfindet, wenn die Serverantwort in "Prozesspuffer" eingefügt wird. Insbesondere wird sichergestellt, dass das CRLF-Zeichenpaar am Ende der Begrüßung vom Server nicht geändert wird.

Mit dieser einen zusätzlichen Änderung konnte ich erfolgreich eine Test-E-Mail über smtp.gmail.com:587 senden.

Meine Emacs-Versionsinformationen lauten "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) vom 10.03.2011 auf 3249CTO".

Ich fand später heraus, dass mein Fix durch die Diskussion unter http://comments.gmane.org/gmane.emacs.devel/140976 abgedeckt ist . Der allgemeine Titel dieser Diskussion lautet "Ändern der Standardeinstellung für" Send-Mail-Funktion "" (sie begann am 26.06.11). Die dort diskutierten Änderungen - die das Update vornehmen - haben es in Emacs 24 geschafft, sind aber in Emacs 23.3 oder 23.4 nicht vorhanden.

Alan Wehmann
quelle
Bei der Untersuchung, wie E-Mails von Emacs über smtp.gmail.com gesendet werden können, bestand eine andere Lösung darin, "stunnel" von Cygwin auf dieselbe Weise zu verwenden, wie VM es verwendet, um beispielsweise eine Verbindung zu einem POP-Server herzustellen. Ich habe die Funktion "smtpmail-via-smtp" in "smtpmail.el" so geändert, dass "stunnel" auf diese Weise verwendet wurde und Testmails erfolgreich über "smtp.gmail.com:465" gesendet wurden. Eine Referenz finden Sie unter [ stackoverflow.com/q/9694912/1264870] (Lesen von E-Mails von Emacs VM mithilfe eines sicheren Servers (Google Mail) [geschlossen]).
Alan Wehmann
11

Es sieht so aus, als ob Emacs 24 (derzeit in der Vorabversion) einige Verbesserungen vorgenommen hat und die Dinge viel einfacher sind. Zunächst kann die smtpmailBibliothek jetzt einfaches SSL ausführen. STARTTLS ist nicht erforderlich. Google Mail SMTP unterstützt SSL an Port 465.

Hier sind die erforderlichen Einstellungen:

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

Die Anmeldeinformationen für die Authentifizierung (Login und Passwort) sollten in einer Datei ~ / .authinfo oder ~ / .authinfo.gpg gespeichert werden. (Sie können nicht mehr in Emacs-Variablen eingefügt werden.) Dort müssen Sie eine Zeile des Formulars einfügen

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

Das ist alles was dazu gehört.

Uday Reddy
quelle