1

Я пытаюсь настроить 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 решил все оставшиеся ошибки аутентификации, которые у меня были.

Спасибо всем за помощь и предложения!

2 ответа2

2

Установите smtpmail-smtp-user , smtpmail нужен для поиска учетных данных в файле authinfo .

1

В выводе SMTP вверху вопроса странно две вещи:

250-STARTTLS

Сервер предлагает STARTTLS , даже если вы установили smtpmail-stream-type на ssl и, следовательно, уже должны иметь зашифрованное соединение. Я не уверен, как проверить, так ли это, и если нет, как это исправить.

Существует некоторая путаница терминологии здесь: SSL и TLS, на самом деле в основном то же самое. SSL версии 3.0 и TLS версии 1.0 являются очень похожими протоколами, и вам редко нужно заботиться о разнице. STARTTLS - это способ настройки зашифрованного соединения: вместо того, чтобы зашифровать соединение с самого начала, соединение начинается незашифрованным, сервер предлагает шифрование, клиент принимает его, а затем они согласовывают зашифрованное соединение. Однако по какой-то причине почти все почтовые клиенты используют "SSL" для обозначения соединений, не зашифрованных по протоколу STARTTLS (SSL или TLS), и "TLS" для обозначения соединений, зашифрованных по протоколу STARTTLS. Emacs этого не делает, поэтому, возможно, стоит попробовать установить smtpmail-stream-type в starttls .

250-AUTH GSSAPI

Сервер предлагает GSSAPI в качестве единственного метода аутентификации, но smtpmail поддерживает только PLAIN , LOGIN и CRAM-MD5 . Если сервер не предложит другие методы аутентификации для зашифрованных соединений, похоже, вам не повезло, когда вы пытаетесь отправить электронную почту из Emacs через этот сервер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .