Allow specifying that SMTP auth should always be used

* doc/misc/smtpmail.texi (Authentication): Document it.

* lisp/mail/smtpmail.el
(smtpmail-servers-requiring-authorization): New variable (bug#26359).
(smtpmail-via-smtp): Use it.
This commit is contained in:
Lars Ingebrigtsen 2019-07-26 12:16:49 +02:00
parent 1573cf98eb
commit 6216c7abd4
2 changed files with 39 additions and 30 deletions

View file

@ -221,10 +221,18 @@ they are allowed to send mail. Authentication usually involves
supplying a user name and password.
If you have not configured anything, then the first time you try to
send mail via a server, Emacs (version 24.1 and later) prompts you
send mail via a server and the SMTP server reports back that it
requires authentication, Emacs (version 24.1 and later) prompts you
for the user name and password to use, and then offers to save the
information. By default, Emacs stores authentication information in
a file @file{~/.authinfo}.
information. By default, Emacs stores authentication information in a
file @file{~/.authinfo}.
@vindex smtpmail-servers-requiring-authorization
Some SMTP servers may bandwidth-limit (or deny) requests from clients
that try to post without authorization---even if they later do supply
that information. To make this library supply that information on
first attempt, set @code{smtpmail-servers-requiring-authorization} to
a regexp that match the server name.
@cindex authinfo
The basic format of the @file{~/.authinfo} file is one line for each

View file

@ -70,34 +70,29 @@
(defcustom smtpmail-default-smtp-server nil
"Specify default SMTP server.
This only has effect if you specify it before loading the smtpmail library."
:type '(choice (const nil) string)
:group 'smtpmail)
:type '(choice (const nil) string))
(defcustom smtpmail-smtp-server
(or (getenv "SMTPSERVER") smtpmail-default-smtp-server)
"The name of the host running SMTP server."
:type '(choice (const nil) string)
:group 'smtpmail)
:type '(choice (const nil) string))
(defcustom smtpmail-smtp-service 25
"SMTP service port number.
The default value would be \"smtp\" or 25."
:type '(choice (integer :tag "Port") (string :tag "Service"))
:group 'smtpmail)
:type '(choice (integer :tag "Port") (string :tag "Service")))
(defcustom smtpmail-smtp-user nil
"User name to use when looking up credentials in the authinfo file.
If non-nil, only consider credentials for the specified user."
:version "24.1"
:type '(choice (const nil) string)
:group 'smtpmail)
:type '(choice (const nil) string))
(defcustom smtpmail-local-domain nil
"Local domain name without a host name.
If the function `system-name' returns the full internet address,
don't define this value."
:type '(choice (const nil) string)
:group 'smtpmail)
:type '(choice (const nil) string))
(defcustom smtpmail-stream-type nil
"Type of SMTP connections to use.
@ -105,7 +100,6 @@ This may be either nil (upgrade with STARTTLS if possible),
`starttls' (refuse to send if STARTTLS isn't available),
`plain' (never use STARTTLS), or `ssl' (to use TLS/SSL)."
:version "24.1"
:group 'smtpmail
:type '(choice (const :tag "Possibly upgrade to STARTTLS" nil)
(const :tag "Always use STARTTLS" starttls)
(const :tag "Never use STARTTLS" plain)
@ -119,55 +113,56 @@ not include an @-sign, so that each RCPT TO address is fully qualified.
Don't bother to set this unless you have get an error like:
Sending failed; 501 <someone>: recipient address must contain a domain."
:type '(choice (const nil) string)
:group 'smtpmail)
:type '(choice (const nil) string))
(defcustom smtpmail-debug-info nil
"Whether to print info in buffer *trace of SMTP session to <somewhere>*.
See also `smtpmail-debug-verb' which determines if the SMTP protocol should
be verbose as well."
:type 'boolean
:group 'smtpmail)
:type 'boolean)
(defcustom smtpmail-debug-verb nil
"Whether this library sends the SMTP VERB command or not.
The commands enables verbose information from the SMTP server."
:type 'boolean
:group 'smtpmail)
:type 'boolean)
(defcustom smtpmail-code-conv-from nil
"Coding system for encoding outgoing mail.
Used for the value of `sendmail-coding-system' when
`select-message-coding-system' is called."
:type 'coding-system
:group 'smtpmail)
:type 'coding-system)
(defcustom smtpmail-queue-mail nil
"Non-nil means mail is queued; otherwise it is sent immediately.
If queued, it is stored in the directory `smtpmail-queue-dir'
and sent with `smtpmail-send-queued-mail'."
:type 'boolean
:group 'smtpmail)
:type 'boolean)
(defcustom smtpmail-queue-dir "~/Mail/queued-mail/"
"Directory where `smtpmail.el' stores queued mail.
This directory should not be writable by other users."
:type 'directory
:group 'smtpmail)
:type 'directory)
(defcustom smtpmail-warn-about-unknown-extensions nil
"If set, print warnings about unknown SMTP extensions.
This is mainly useful for development purposes, to learn about
new SMTP extensions that might be useful to support."
:type 'boolean
:version "21.1"
:group 'smtpmail)
:version "21.1")
(defcustom smtpmail-queue-index-file "index"
"File name of queued mail index.
This is relative to `smtpmail-queue-dir'."
:type 'string
:group 'smtpmail)
:type 'string)
(defcustom smtpmail-servers-requiring-authorization nil
"Regexp matching servers that require authorization.
Normally smtpmail will try first to send emails via SMTP without
user/password credentials, and then retry using credentials if
the server says that it requires it. If the server name matches
this regexp, smtpmail will send over the credentials on the first
attempt."
:type '(choice regexp (const :tag "None" nil)))
;; End of customizable variables.
@ -679,6 +674,12 @@ Returns an error if the server cannot be contacted."
result
auth-mechanisms
(supported-extensions '()))
(when (and smtpmail-servers-requiring-authorization
(string-match-p smtpmail-servers-requiring-authorization
smtpmail-smtp-server))
(setq ask-for-password t))
(unwind-protect
(catch 'done
;; get or create the trace buffer