Cách định cấu hình Emacs smtp để sử dụng máy chủ bảo mật (gmail)


9

Đây là một câu hỏi ban đầu được đặt ra trên https://answers.launchpad.net/vm/+question/108267 vào ngày 2010-04-26.

Nó hỏi làm thế nào một người nên cấu hình các gói gửi thư Emacs trên MS Windows để sử dụng với máy chủ SMTP an toàn như gmail, yêu cầu TLS và STARTTLS. Câu hỏi ban đầu được sao chép dưới đây.


  • Tôi đã cài đặt Cygwins gnutls.

  • Trong .emacs đã viết:

    (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)
  • Tôi đã tạo tệp "~ / .authinfo" với thông tin gmail.

  • Tôi đã xóa starttls.elc, vì vậy phiên bản đã biên dịch sẽ không được tải bởi emacs.

  • Tôi thay thế (signal-process (process-id process) 'SIGALRM)cho

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

Tôi đã sử dụng mô tả từ: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • Khi tôi cố gắng gửi thư, nó nói trong bộ thu nhỏ: "Gửi lỗi SMTP không thành công"

Trong bộ đệm gỡ lỗi tôi gặp lỗi:

'Process SMTP exited abnormally with code 53'

Điều đó không cho tôi biết bất cứ điều gì hữu ích.

Câu trả lời:


4

Sau đây là lời khuyên dẫn đến câu hỏi của thời điểm này. Lời khuyên đã được khai quật bởi Uday Reddy và có thể được tìm thấy tại http://article.gmane.org/gmane.emacs.windows/3250 . Đó là ngày 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)))

Theo tài liệu của gnutsl-cli (ví dụ: http://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

Đây là "kết nối, thiết lập một phiên đơn giản và bắt đầu tls." Lựa chọn. Phiên TLS sẽ được bắt đầu khi nhận được EOF hoặc SIGALRM.

Lỗi # 7789, được thảo luận tại nhóm tin gnu.emacs.orms, báo cáo sự thiếu hụt tín hiệu này trong MS Windows (còn gọi là Woe32).

Tôi cũng đã làm theo lời khuyên để thực hiện thay đổi này (trong chức năng "starttls-đàm phán-gnutls" trong tệp "starttls.el") nhưng tôi vẫn không thành công trong việc gửi email kiểm tra qua máy chủ smtp.gmail.com giáp87.

Tôi xác định rằng một sửa chữa là thay đổi dòng trong chức năng "smtpmail-via-smtp" trong tệp "smtpmail.el" có nội dung:

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

đến

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

Điều này bảo đảm rằng không có chuyển đổi mã hóa diễn ra khi phản hồi của máy chủ được chèn vào "bộ đệm quy trình". Đặc biệt, nó đảm bảo rằng cặp ký tự CRLF ở cuối 220 lời chào từ máy chủ không bị thay đổi.

Với một thay đổi bổ sung này, tôi đã thành công trong việc gửi email kiểm tra qua smtp.gmail.com giáp87.

Thông tin phiên bản Emacs của tôi là "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) của 2011 / 03-10 trên 3249CTO".

Sau đó tôi thấy rằng bản sửa lỗi của mình được đề cập trong cuộc thảo luận tại http://comments.gmane.org/gmane.emacs.devel/140976 . Tiêu đề chung của cuộc thảo luận đó là "Thay đổi mặc định cho 'chức năng gửi thư'" (bắt đầu vào ngày 26/11/11). Những thay đổi được thảo luận ở đó - giúp khắc phục - biến nó thành Emacs 24, nhưng không có trong Emacs 23.3 hoặc 23.4.


Trong khi điều tra cách gửi email từ Emacs qua smtp.gmail.com, một giải pháp khác là sử dụng "stunnel" từ Cygwin theo cách tương tự như VM sử dụng nó để kết nối với máy chủ POP. Tôi đã sửa đổi chức năng "smtpmail-via-smtp" trong "smtpmail.el" để nó sử dụng "stunnel" theo cách này và đã thành công trong việc gửi thư kiểm tra qua "smtp.gmail.com:465". Để tham khảo, xem [ stackoverflow.com/q/9694912/1264870] (Đọc email từ Emacs VM bằng máy chủ bảo mật (Gmail) [đã đóng]).
Alan Wehmann

11

Có vẻ như Emacs 24 (hiện đang được phát hành trước) đã thực hiện một số cải tiến và mọi thứ đơn giản hơn rất nhiều. Trước hết, smtpmailthư viện bây giờ có thể làm SSL đơn giản. Không cần STARTTLS. Và, gmail SMTP hỗ trợ SSL trên cổng 465.

Vì vậy, đây là các cài đặt cần thiết:

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

Thông tin xác thực (đăng nhập và mật khẩu) sẽ đi vào một tệp ~ / .authinfo hoặc ~ / .authinfo.gpg. (Chúng không thể được đặt trong các biến Emacs nữa.) Ở đó, bạn cần bao gồm một dòng của biểu mẫu

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

Đó là tất cả để có nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.