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-typessl이미 암호화 된 연결을해야하므로합니다. 이것이 사실인지 확인하는 방법을 모르고, 그렇지 않은 경우이를 해결하는 방법을 모르겠습니다.

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

250-AUTH GSSAPI

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


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