วิธีกำหนดค่า Emacs smtp สำหรับการใช้เซิร์ฟเวอร์ที่ปลอดภัย (gmail)


9

นี่เป็นคำถามแรกเริ่มที่https://answers.launchpad.net/vm/+question/108267เมื่อวันที่ 2010-04-26

มันถามว่าควรกำหนดค่าแพคเกจการส่งเมลของ Emacs ใน MS Windows อย่างไรให้ใช้กับเซิร์ฟเวอร์ SMTP ที่ปลอดภัยเช่น gmail ซึ่งต้องใช้ TLS และ STARTTLS คำถามเดิมถูกคัดลอกด้านล่าง


  • ฉันติดตั้ง Cygwins gnutls

  • ใน. emacs เขียนว่า:

    (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)
  • ฉันสร้างไฟล์ "~ / .authinfo" ด้วยข้อมูลประจำตัว gmail

  • ฉันลบ starttls.elc ดังนั้น emacs ที่คอมไพล์แล้วจะไม่โหลด

  • ฉันแทนที่(signal-process (process-id process) 'SIGALRM)ไป

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

ฉันใช้คำอธิบายจาก: http://obfuscatedcode.wordpress.com/2007/04/26/configuring-emacs-for-gmails-smtp/

  • เมื่อฉันพยายามส่งจดหมายจะมีข้อความระบุว่าใน minibuffer: "การส่งข้อผิดพลาด SMTP ล้มเหลว"

ในบัฟเฟอร์แก้ปัญหาฉันได้รับข้อผิดพลาด:

'Process SMTP exited abnormally with code 53'

ที่ไม่ได้บอกอะไรเลยมีประโยชน์

คำตอบ:


4

ต่อไปนี้เป็นคำแนะนำที่นำไปสู่คำถามในขณะนี้ คำแนะนำที่ถูกค้นพบโดย Uday Reddy และสามารถพบได้ที่http://article.gmane.org/gmane.emacs.windows/3250 มันคือวันที่ 8/7/2549

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)))

ตามเอกสารของ gnutsl-cli (เช่นhttp://www.gnu.org/software/gnutls/manual/html_node/gnutls_002dcli-Invocation.html#gnutls_002dcli-Invocation ):

starttls option (-s)

นี่คือ "เชื่อมต่อสร้างเซสชันธรรมดาและเริ่มต้น tls" ตัวเลือก เซสชัน TLS จะเริ่มเมื่อได้รับ EOF หรือ SIGALRM

ข้อผิดพลาด # 7789 ที่กล่าวถึงที่กลุ่มข่าว gnu.emacs.bug รายงานการขาดการส่งสัญญาณนี้ใน MS Windows (aka Woe32)

ฉันทำตามคำแนะนำเพื่อทำการเปลี่ยนแปลงนี้ (ในฟังก์ชั่น "starttls-negotiate-gnutls" ในไฟล์ "starttls.el") แต่ฉันก็ยังประสบความสำเร็จในการส่งอีเมลทดสอบผ่านเซิร์ฟเวอร์ smtp.gmail.com 5387

ฉันพิจารณาแล้วว่าการแก้ไขคือการเปลี่ยนบรรทัดในฟังก์ชั่น "smtpmail-via-smtp" ในไฟล์ "smtpmail.el" ที่อ่าน:

(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)))

สิ่งนี้รับประกันว่าจะไม่มีการแปลงการเข้ารหัสเกิดขึ้นเมื่อมีการแทรกการตอบกลับของเซิร์ฟเวอร์ลงใน "กระบวนการบัฟเฟอร์" โดยเฉพาะอย่างยิ่งจะช่วยให้มั่นใจว่าคู่อักขระ CRLF ที่ส่วนท้ายของคำทักทาย 220 จากเซิร์ฟเวอร์จะไม่ได้รับการเปลี่ยนแปลง

ด้วยการเปลี่ยนแปลงเพิ่มเติมนี้ทำให้ฉันประสบความสำเร็จในการส่งอีเมลทดสอบผ่าน smtp.gmail.com 5387

ข้อมูลรุ่น Emacs ของฉันคือ "GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600) ปี 2011-03-10 ใน 3249CTO"

ผมมารู้ทีหลังพบว่าการแก้ไขของฉันถูกปกคลุมด้วยการอภิปรายที่http://comments.gmane.org/gmane.emacs.devel/140976 หัวข้อทั่วไปของการสนทนาคือ "การเปลี่ยนค่าเริ่มต้นสำหรับ` send-mail-function '"(เริ่มต้นเมื่อวันที่ 6/26/11) การเปลี่ยนแปลงที่กล่าวถึงที่นั่นซึ่งทำให้การแก้ไขทำให้เป็น Emacs 24 แต่ไม่ปรากฏใน Emacs 23.3 หรือ 23.4


ในขณะที่ตรวจสอบวิธีส่งอีเมลจาก Emacs ผ่าน smtp.gmail.com อีกวิธีหนึ่งคือใช้ "stunnel" จาก Cygwin ในลักษณะเดียวกับที่ VM ใช้เพื่อเชื่อมต่อกับเช่นเซิร์ฟเวอร์ POP ฉันปรับเปลี่ยนฟังก์ชั่น "smtpmail-via-smtp" ใน "smtpmail.el" เพื่อให้มันใช้ "stunnel" ในลักษณะนี้และประสบความสำเร็จในการส่งอีเมลทดสอบผ่าน "smtp.gmail.com:465" สำหรับการอ้างอิงโปรดดูที่ [ stackoverflow.com/q/9694912/1264870] (อ่านอีเมลจาก Emacs VM โดยใช้เซิร์ฟเวอร์ที่ปลอดภัย (Gmail) [ปิด])
Alan Wehmann

11

ดูเหมือนว่า Emacs 24 (ปัจจุบันเปิดตัวล่วงหน้า) ได้ทำการปรับปรุงหลายอย่างและสิ่งต่าง ๆ นั้นง่ายกว่ามาก ประการแรกsmtpmailห้องสมุดสามารถทำ SSL แบบธรรมดาได้แล้ว ไม่จำเป็นต้อง STARTTLS และ gmail SMTP รองรับ SSL ที่พอร์ต 465

ดังนั้นนี่คือการตั้งค่าที่จำเป็น:

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

ข้อมูลรับรองการตรวจสอบ (เข้าสู่ระบบและรหัสผ่าน) ควรเข้าไปในไฟล์ ~ / .authinfo หรือ ~ / .authinfo.gpg (ไม่สามารถใส่ตัวแปร Emacs ได้อีกแล้ว) ที่นั่นคุณต้องรวมบรรทัดของแบบฟอร์ม

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

นั่นคือทั้งหมดที่มีให้มัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.