[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 603e704: Try resending when getting a transient 4xx
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master 603e704: Try resending when getting a transient 4xx SMTP code |
Date: |
Mon, 16 Sep 2019 17:49:35 -0400 (EDT) |
branch: master
commit 603e70483b844201a46f13e0a9e7acf50d3fd273
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>
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).
---
etc/NEWS | 4 ++++
lisp/mail/smtpmail.el | 21 ++++++++++++++++++++-
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/etc/NEWS b/etc/NEWS
index 1218269..adb2b64 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -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
diff --git a/lisp/mail/smtpmail.el b/lisp/mail/smtpmail.el
index f6fd1cd..57913c1 100644
--- a/lisp/mail/smtpmail.el
+++ b/lisp/mail/smtpmail.el
@@ -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))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 603e704: Try resending when getting a transient 4xx SMTP code,
Lars Ingebrigtsen <=