Cara mengkonfigurasi Emacs smtp untuk menggunakan server aman (gmail)

9

Ini adalah pertanyaan yang awalnya diajukan di https://answers.launchpad.net/vm/+question/108267 pada 2010-04-26.

Ia bertanya bagaimana seseorang harus mengkonfigurasi paket pengiriman surat Emacs di MS Windows untuk digunakan dengan server SMTP yang aman seperti gmail, yang memerlukan TLS dan STARTTLS. Pertanyaan asli disalin di bawah ini.


  • Saya menginstal kacang Cygwin.

  • Dalam .emacs menulis:

    (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)
  • Saya membuat file "~ / .authinfo" dengan kredensial gmail.

  • Saya menghapus starttls.elc, jadi versi yang dikompilasi tidak akan dimuat oleh emacs.

  • Saya diganti (signal-process (process-id process) 'SIGALRM)menjadi

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

Saya menggunakan deskripsi dari: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Ketika saya mencoba mengirim surat, ia mengatakan dalam minibuffer: "Mengirim kesalahan SMTP gagal"

Di buffer debug saya mendapatkan kesalahan:

'Process SMTP exited abnormally with code 53'

itu tidak memberitahuku sesuatu yang berguna.

Uday Reddy
sumber

Jawaban:

4

Berikut ini adalah saran yang mengarah ke pertanyaan saat ini. Saran itu digali oleh Uday Reddy dan dapat ditemukan di http://article.gmane.org/gmane.emacs.windows/3250 . Tanggal 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)))

Menurut dokumentasi gnutsl-cli (mis. Http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Ini adalah "terhubung, buat sesi polos dan mulai tls." pilihan. Sesi TLS akan dimulai ketika EOF atau SIGALRM diterima.

Bug # 7789, dibahas di newsgroup gnu.emacs.bug, melaporkan kekurangan pensinyalan ini di MS Windows (alias Woe32).

Saya juga mengikuti saran untuk melakukan perubahan ini (dalam fungsi "starttls-negotiate-gnutls" dalam file "starttls.el") tetapi saya masih gagal mengirim email uji melalui server smtp.gmail.com 5-108.

Saya memutuskan bahwa perbaikan adalah mengubah baris dalam fungsi "smtpmail-via-smtp" di file "smtpmail.el" yang bertuliskan:

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

untuk

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

Ini memastikan bahwa tidak ada konversi pengkodean yang terjadi ketika respons server dimasukkan ke "buffer proses". Secara khusus, ini memastikan bahwa pasangan karakter CRLF di akhir ucapan dari server tidak diubah.

Dengan satu perubahan tambahan ini, saya berhasil mengirim email percobaan melalui smtp.gmail.com-587.

Informasi versi Emacs saya adalah "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) dari 2011-03-10 pada 3249CTO".

Saya kemudian menemukan bahwa perbaikan saya dicakup oleh diskusi di http://comments.gmane.org/gmane.emacs.devel/140976 . Judul umum dari diskusi itu adalah "Mengubah default untuk` send-mail-function '"(dimulai pada 6/26/11). Perubahan yang dibahas di sana - yang membuat perbaikan - membuatnya menjadi Emacs 24, tetapi tidak ada dalam Emacs 23.3 atau 23.4.

Alan Wehmann
sumber
Saat menyelidiki cara mengirim email dari Emacs melalui smtp.gmail.com solusi lain adalah menggunakan "stunnel" dari Cygwin dengan cara yang sama seperti VM menggunakannya untuk terhubung ke misalnya server POP. Saya memodifikasi fungsi "smtpmail-via-smtp" di "smtpmail.el" sehingga menggunakan "stunnel" dengan cara ini dan berhasil mengirim surat uji melalui "smtp.gmail.com:465". Untuk referensi, lihat [ stackoverflow.com/q/9694912/1264870] (Membaca email dari Emacs VM menggunakan server yang aman (Gmail) [ditutup]).
Alan Wehmann
11

Sepertinya Emacs 24 (saat ini dalam pra-rilis) telah membuat beberapa perbaikan dan banyak hal yang lebih sederhana. Pertama-tama, smtpmailperpustakaan sekarang dapat melakukan SSL biasa. Tidak perlu STARTTLS. Dan, gmail SMTP mendukung SSL pada port 465.

Jadi, berikut adalah pengaturan yang diperlukan:

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

Kredensial otentikasi (login dan kata sandi) harus masuk ke file ~ / .authinfo atau ~ / .authinfo.gpg. (Mereka tidak dapat dimasukkan ke dalam variabel Emacs lagi.) Di sana, Anda perlu memasukkan garis formulir

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

Hanya itu yang ada untuk itu.

Uday Reddy
sumber