emacs에서 메일을 보낼 때 "SMTP 프로토콜 오류"


1

SMTP 서버를 통해 메일을 보내도록 emacs를 구성하려고했지만 지금까지는 성공하지 못했습니다. 내가 얻는 결과는 다음과 같습니다.

220 __SMTP.SERVER__ ESMTP Sendmail 8.14.4+UW11.03/8.14.4+UW13.09; Wed, 15 Jan 2014 13:16:39 -0800
250-__SMTP.SERVER__ Hello __LOCAL.DOMAIN__ [__IP.ADDRESS__], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE 60000000
250-DSN
250-AUTH GSSAPI
250-STARTTLS
250-DELIVERBY
250 HELP
250 2.0.0 Verbose mode
250 2.1.0 <__USER@DOMAIN__>... Sender ok
530 5.7.1 Relaying denied. Proper authentication required.
smtpmail-send-it: Sending failed; SMTP protocol error

관련 init.el 은 다음과 같이 설정됩니다.

(setq send-mail-function 'smtpmail-send-it)
(setq smtpmail-smtp-server "__SMTP.SERVER__")
(setq smtpmail-smtp-service 587)
(setq smtpmail-stream-type 'ssl)
(setq smtpmail-debug-info t)
(setq smtpmail-debug-verb t)

다음과 같은 .authinfo 파일 도 있습니다 .

machine __SMTP.SERVER__ port 587 login __USER__ password *

내가 놓쳤거나 잘못한 것에 대한 생각이 있습니까?


편집 1

@ techie007 서버 관리자와 이야기를 나 he으며, 서버가 인증 후 릴레이를 허용한다고 가정했습니다. 이제 인증을 잘못 설정했는지 궁금합니다. 나는 서버가 TLS 암호화를 사용한다는 것을 알고 있으며 smtpmail-stream-type 'ssl대신 대신 구성했다는 것을 알고 'tls있지만 emacs 설명서는 'sslSSL과 TLS 연결 모두에 사용될 것이라고 믿었습니다 ( http://www.gnu.org/ software / emacs / manual / html_mono / smtpmail.html # Encryption ). 이것이 잘못 되었습니까?

또한 SMTP 서버는 실제로 다른 클라이언트와 작동합니다. 내가 만드는 데 어려움이있는 것은이 특별한 연결입니다.


편집 2

init.el 의 retooling은 다음과 같습니다 :

 (setq message-send-mail-function 'smtpmail-send-it
      smtpmail-starttls-credentials '(("__SMPT.SERVER__" 587 nil nil))
      smtpmail-auth-credentials '(("__SMTP.SERVER" 587 "__USER__" nil))
      smtpmail-default-smtp-server "__SMTP_SERVER__"
      smtpmail-smtp-server "__SMTP.SERVER__"
      smtpmail-smtp-service 587
      smtpmail-local-domain "__LOCAL.DOMAIN__")

.authinfo 파일 이 필요 없습니다 . 메일 발송 시도를 포함한 전체 로그 :

Loading 00debian-vars...done
Loading /etc/emacs/site-start.d/50autoconf.el (source)...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...done
Loading debian-ispell...done
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done
Loading /etc/emacs/site-start.d/50psvn.el (source)...done
Loading /etc/emacs23/site-start.d/50vm-init.el (source)...done
For information about GNU Emacs and the GNU system, type C-h C-a.
goto-history-element: Beginning of history; no preceding item
Quit
Loading /home/__USER__/.xemacs/init.el (source)...done
Loading /home/__USER__/.xemacs/custom.el (source)...done
/usr/bin/mail is not an executable. Setting mail-interactive to t.
Adding vm-rfaddons-option `check-recipients'.
Adding vm-rfaddons-option `check-for-empty-subject'.
Adding vm-rfaddons-option `encode-headers'.
VM-RFADDONS: VM is now infected.
ispell.el is already loaded
Sending...
Added to /home/__USER__/vm-folders/SentMail
sendmail-send-it: Sending...failed with exit value 1

편집 3

나는 약간의 발전을 이루었습니다! Emacs를 처음 시작할 때로 VM을 시작 C-x m하고 메시지를 보내려고하면 첫 번째 출력에서 ​​오류가 발생합니다 smtpmail-send-it: Sending failed; SMTP protocol error. 그러나 C-x C-f ~/.emacs파일을 열고을 입력 M-x eval-buffer하면 VM으로 돌아가 메시지를 완벽하게 보낼 수 있습니다. 따라서 .emacs 구성은 다음과 같습니다.

(setq message-send-mail-function 'smtpmail-send-it
      send-mail-function 'smtpmail-send-it
      smtpmail-default-smtp-server "__SMTP.SERVER__"
      smtpmail-smtp-server "__SMTP.SERVER__"
      smtpmail-smtp-service 587
      smtpmail-stream-type 'ssl
      smtpmail-auth-credentials '(("__SMTP.SERVER__" 587 "__USER__" "__PASSWORD__"))
)

.emacs모든 Emacs 세션이 시작될 때 평가할 필요가없는 방법을 아는 사람이 있습니까?


최종 편집

효과가있다! 폐쇄를 위해 최종 작업 구성을 여기에 게시하겠습니다.

(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/vm/")
(require 'vm-autoloads)
(load "/usr/local/share/emacs/site-lisp/vm/vm-reply")
(setq message-send-mail-function 'smtpmail-send-it
      send-mail-function 'smtpmail-send-it
      user-mail-address "__USER.MAIL.ADDRESS__"
      smtpmail-default-smtp-server "__SMTP.SERVER__" 
      smtpmail-smtp-server "__SMTP.SERVER__"
      smtpmail-smtp-service 587
      smtpmail-stream-type 'ssl
      smtpmail-smtp-user "__USER__"
      smtpmail-starttls-credentials '(("__SMTP.SERVER__" 587 "__USER__" nil)))
      starttls-use-gnutls t 
      starttls-gnutls-program "gnutls-cli"
      starttls-extra-arguments nil
)

에서 퍼팅 'load-path과하는 'vm-autoloads몇 가지 도움 듯 오류 "함수 정의 무효이다", 그리고 수동 부하가 vm-reply누락 된 자동로드로 구성된 VM의 8.2.0b에서 발견 된 버그의 해결 방법입니다; 그렇지 않으면의 정의가 무효화되었습니다 vm-select-recipient-from-sender. 또한 .authinfo 파일을 사용하여 smtpmail-auth-credentials변수 와 충돌하고 있음을 확인한 후에 다시 인증했습니다 . netawater 의 제안에 smtpmail-smtp-user따라 .authinfo 와 함께 사용됩니다 . user-mail-address내가 가진 나머지 인증 오류를 해결했습니다.

모든 도움과 제안에 감사합니다.


1
예, 릴레이를 허용하지 않는 메일 서버를 통해 릴레이하려고합니다. "5.7.1 릴레이가 거부되었습니다." 서버 설정 방법에 따라 인증만으로는 충분하지 않을 수 있습니다. 메일 서버 관리자에게 선택한 규칙에 대해 이야기 했습니까? 표준 메일 클라이언트를 통해 해당 계정과 메일 서버를 사용하여이 컴퓨터 / 네트워크에서 메일을 보낼 수 있습니까?
— Ƭᴇcʜιᴇ007

1
로그에는 인증되지 않은 것으로 표시됩니다. 문제는 ... 왜?
— David Schwartz

답변:


4

설정 smtpmail-smtp-user, smtpmail자격 증명을 조회 할 필요 authinfo파일입니다.


이것은 인증 문제를 해결하는 데 필요한 마지막 작은 추진이었습니다. 감사합니다!
— tlake

1

질문 맨 위에서 SMTP 출력에 대해 이상한 점이 두 가지 있습니다.

250-STARTTLS

서버는 제안 STARTTLS당신이 설정 한 경우에도 smtpmail-stream-type에 ssl이미 암호화 된 연결을해야하므로합니다. 이것이 사실인지 확인하는 방법을 모르고, 그렇지 않은 경우이를 해결하는 방법을 모르겠습니다.

몇 가지 용어의 혼란이 여기에 있습니다 : SSL과 TLS는 실제로 기본적으로 같은 일. SSL 버전 3.0과 TLS 버전 1.0은 매우 유사한 프로토콜이므로 차이점에 신경 쓸 필요가 거의 없습니다. STARTTLS는 암호화 된 연결을 설정하는 방법입니다. 처음부터 연결을 암호화하는 대신 연결이 암호화되지 않은 상태로 시작되고 서버가 암호화를 제공하고 클라이언트가이를 승인 한 다음 암호화 된 연결을 협상합니다. 그러나 어떤 이유로 든 거의 모든 메일 클라이언트는 "SSL"을 사용하여 비 STARTTLS 암호화 연결 (SSL 또는 TLS)을 나타내고 "TLS"를 사용하여 STARTTLS 암호화 연결을 나타냅니다. 이맥스하지 않습니다, 그래서 설정을 시도 가치가있을 수도 있습니다 smtpmail-stream-type에 starttls.

250-AUTH GSSAPI

서버 GSSAPI는 유일한 인증 방법으로 제안 하지만 , 및 smtpmail만 지원합니다 . 서버가 암호화 된 연결에서 다른 인증 방법을 제안하지 않는 한이 서버를 통해 Emacs에서 이메일을 보내려고하지 않는 것 같습니다.PLAINLOGINCRAM-MD5


내 문제를 정확하게 해결하지는 못하지만 몇 가지 사항을 명확하게하고 이해력을 향상시킵니다. 서버가 실제로 GSSAPI를 적용하려고 시도하는 동안 sysadmin과의 대화에서 서버가 PLAIN도 지원한다는 것이 밝혀졌습니다. 어쨌든 여전히 어떤 방식으로 STARTTLS를 사용해야했습니다. 감사!
— tlake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.