Я пытаюсь настроить emacs для отправки почты через SMTP-сервер, но до сих пор не удалось. Вот результат, который я получаю:
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 Я разговаривал с администратором сервера, и он сказал мне, что сервер должен разрешать ретрансляцию после аутентификации; теперь мне интересно, правильно ли я настроил аутентификацию. Я знаю, что сервер использует шифрование TLS, и я знаю, что я настроил smtpmail-stream-type 'ssl
вместо 'tls
, но документация по emacs привела меня к мысли, что 'ssl
должен использоваться как для соединений SSL, так и для TLS (http://www.gnu.org/software/emacs/manual/html_mono/smtpmail.html#Encryption). Это неправильно?
Кроме того, SMTP-сервер действительно работает с другими клиентами; это именно то соединение, с которым у меня возникают проблемы.
РЕДАКТИРОВАТЬ 2
Переоборудование init.el теперь гласит:
(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 я запускаю виртуальную машину с C-x m
, и если я пытаюсь отправить сообщение, у меня возникает сбой в первом выводе - smtpmail-send-it: Sending failed; SMTP protocol error
. Однако, если я C-x C-f ~/.emacs
чтобы открыть файл, а затем ввести M-x eval-buffer
, я могу затем вернуться в ВМ и отправить сообщение совершенно нормально. Таким образом, конфигурация .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
; smtpmail-smtp-user
используется в сочетании с .authinfo согласно предложению netawater . user-mail-address
решил все оставшиеся ошибки аутентификации, которые у меня были.
Спасибо всем за помощь и предложения!