보안 서버 (gmail)를 사용하기 위해 Emacs smtp를 구성하는 방법 원래 https://answers.launchpad.net/vm/+question/108267(2010-04-26) 에 제기 된 질문 입니다. TLS

이것은 원래 https://answers.launchpad.net/vm/+question/108267(2010-04-26) 에 제기 된 질문 입니다.

TLS 및 STARTTLS가 필요한 gmail과 같은 보안 SMTP 서버와 함께 사용하기 위해 MS Windows에서 Emacs 메일 전송 패키지를 구성하는 방법을 묻습니다. 원래 질문은 아래에 복사되어 있습니다.


  • 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)
  • Gmail 자격 증명을 사용하여 “~ / .authinfo”파일을 만들었습니다.

  • 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/ 에서 설명을 사용했습니다.

  • 메일을 보내려고 할 때 미니 버퍼에 다음과 같이 표시됩니다. “Send failed SMTP error”

디버그 버퍼에서 오류가 발생합니다.

'Process SMTP exited abnormally with code 53'

유용한 정보는 없습니다.



답변

다음은 그 순간의 문제를 야기한 조언입니다. 조언은 Uday Reddy에 의해 발굴되었으며 http://article.gmane.org/gmane.emacs.windows/3250 에서 찾을 수 있습니다 . 날짜는 2006 년 8 월 7 일입니다.

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를 시작합니다.”입니다. 선택권. EOF 또는 SIGALRM이 수신되면 TLS 세션이 시작됩니다.

뉴스 그룹 gnu.emacs.bug에서 논의 된 버그 # 7789는 MS Windows (일명 Woe32)에서이 신호 부족을보고합니다.

또한이 변경을 수행하기위한 조언 (파일 “starttls.el”의 “starttls-negotiate-gnutls”기능)을 수행했지만 smtp.gmail.com:587 서버를 통해 테스트 이메일을 보내는 데 여전히 실패했습니다.

수정 사항은 “smtpmail.el”파일의 “smtpmail-via-smtp”기능에서 행을 변경하는 것으로 결정되었습니다.

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

이렇게하면 서버 응답이 “프로세스 버퍼”에 삽입 될 때 코딩 변환이 발생하지 않습니다. 특히, 서버로부터의 220 인사말 끝에 CRLF 문자 쌍이 변경되지 않도록합니다.

이 추가 변경으로 smtp.gmail.com:587을 통해 테스트 이메일을 보내는 데 성공했습니다.

내 Emacs 버전 정보는 “3249CTO의 2011-03-10의 GNU Emacs 23.3.1 (i386-mingw-nt5.1.2600)”입니다.

나중에 내 수정 사항이 http://comments.gmane.org/gmane.emacs.devel/140976 의 토론에 포함되어 있음을 알았습니다 . 이 토론의 일반적인 제목은 ” ‘메일 기능 보내기’의 기본값 변경”입니다 (11/26/11에 시작). 이 문제를 해결하기 위해 논의 된 변경 사항으로 인해 Emacs 24로 변경되었지만 Emacs 23.3 또는 23.4에는 없습니다.


답변

Emacs 24 (현재 시험판)는 몇 가지 개선 사항이 있으며 훨씬 간단합니다. 우선, smtpmail라이브러리는 이제 일반 SSL을 수행 할 수 있습니다. STARTTLS 할 필요가 없습니다. 그리고 gmail SMTP는 포트 465에서 SSL을 지원합니다.

필요한 설정은 다음과 같습니다.

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

인증 자격 증명 (로그인 및 비밀번호)은 ~ / .authinfo 또는 ~ / .authinfo.gpg 파일로 이동해야합니다. (이맥스 변수에는 더 이상 넣을 수 없습니다.) 거기에 폼의 라인을 포함시켜야합니다.

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

그것이 전부입니다.