이것은 원래 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
그것이 전부입니다.