Commit 603e7048 authored by Lars Ingebrigtsen's avatar Lars Ingebrigtsen

Try resending when getting a transient 4xx SMTP code

* lisp/mail/smtpmail.el (smtpmail-via-smtp): Try resending when
getting a transient error message (bug#34177).
parent 2c2f0eb9
Pipeline #3165 passed with stage
in 85 minutes and 59 seconds
......@@ -1162,6 +1162,10 @@ defining new 'cl-defmethod' of 'smtpmail-try-auth-method'.
attempt when communicating with the SMTP server(s), the
'smtpmail-servers-requiring-authorization' variable can be used.
---
*** smtpmail will now try resending mail when getting a transient 4xx
error message from the SMTP server.
** Footnote mode
*** Support Hebrew-style footnotes
......
......@@ -654,10 +654,12 @@ Returns an error if the server cannot be contacted."
user-mail-address))))
(defun smtpmail-via-smtp (recipient smtpmail-text-buffer
&optional ask-for-password)
&optional ask-for-password
send-attempts)
(unless smtpmail-smtp-server
(smtpmail-query-smtp-server))
(let ((process nil)
(send-attempts (or send-attempts 1))
(host (or smtpmail-smtp-server
(error "`smtpmail-smtp-server' not defined")))
(port smtpmail-smtp-service)
......@@ -819,6 +821,23 @@ Returns an error if the server cannot be contacted."
((smtpmail-ok-p (setq result (smtpmail-read-response process)))
;; Success.
)
((and (numberp (car result))
(<= 400 (car result) 499)
(< send-attempts 10))
(message "Got transient error code %s when sending; retrying attempt %d..."
(car result) send-attempts)
;; Retry on getting a transient 4xx code; see
;; https://tools.ietf.org/html/rfc5321#section-4.2.1
(ignore-errors
(smtpmail-send-command process "QUIT")
(smtpmail-read-response process))
(delete-process process)
(sleep-for 1)
(setq process nil)
(throw 'done
(smtpmail-via-smtp recipient smtpmail-text-buffer
ask-for-password
(1+ send-attempts))))
((and auth-mechanisms
(not ask-for-password)
(eq (car result) 530))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment