보안 서버 (gmail)를 사용하기 위해 Emacs smtp를 구성하는 방법


9

이것은 원래 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'

유용한 정보는 없습니다.

답변:


4

다음은 그 순간의 문제를 야기한 조언입니다. 조언은 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에는 없습니다.


smtp.gmail.com을 통해 Emacs에서 이메일을 보내는 방법을 조사하는 동안 다른 솔루션은 VM이 POP 서버에 연결하는 데 사용하는 것과 같은 방식으로 Cygwin의 "터널"을 사용하는 것입니다. "smtpmail.el"에서 "smtpmail-via-smtp"기능을 수정하여 이런 방식으로 "터널"을 사용하고 "smtp.gmail.com:465"를 통해 테스트 메일을 보내는 데 성공했습니다. 자세한 내용은 [ stackoverflow.com/q/9694912/1264870] (보안 서버를 사용하여 Emacs VM에서 이메일 읽기 (Gmail) [폐쇄])를 참조하십시오.
Alan Wehmann

11

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

그것이 전부입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.