You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2022/05/13 15:37:38 UTC

[allura] branch db/8430 created (now 1fc5f7ebe)

This is an automated email from the ASF dual-hosted git repository.

brondsem pushed a change to branch db/8430
in repository https://gitbox.apache.org/repos/asf/allura.git


      at 1fc5f7ebe [#8430] connect more proactively; retry only certain SMTP failures

This branch includes the following new commits:

     new 1fc5f7ebe [#8430] connect more proactively; retry only certain SMTP failures

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[allura] 01/01: [#8430] connect more proactively; retry only certain SMTP failures

Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

brondsem pushed a commit to branch db/8430
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 1fc5f7ebe3e2ec50e51f0c8d22e6cbc8eba4b833
Author: Dave Brondsema <db...@slashdotmedia.com>
AuthorDate: Fri May 13 11:37:42 2022 -0400

    [#8430] connect more proactively; retry only certain SMTP failures
---
 Allura/allura/lib/mail_util.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/Allura/allura/lib/mail_util.py b/Allura/allura/lib/mail_util.py
index 67808b704..374cb25ef 100644
--- a/Allura/allura/lib/mail_util.py
+++ b/Allura/allura/lib/mail_util.py
@@ -301,12 +301,25 @@ class SMTPClient:
             log.warning('No valid addrs in %s, so not sending mail',
                         list(map(str, addrs)))
             return
+        if not self._client:
+            self._connect()
         try:
             self._client.sendmail(
                 config.return_path,
                 smtp_addrs,
                 content)
-        except Exception:
+            need_retry = False
+        except (smtplib.SMTPServerDisconnected, smtplib.SMTPConnectError) as e:
+            log.info(f'will retry after getting this smtp error: {e!r}')
+            need_retry = True
+        except smtplib.SMTPResponseException as e:
+            if 400 <= e.smtp_code < 500:  # 4__ is "Transient Negative"
+                log.info(f'will retry after getting this smtp error: {e!r}')
+                need_retry = True
+            else:
+                raise
+        if need_retry:
+            # maybe could sleep?  or if we're in a task, reschedule it somehow?
             self._connect()
             self._client.sendmail(
                 config.return_path,
@@ -314,6 +327,7 @@ class SMTPClient:
                 content)
 
     def _connect(self):
+        log.info('connecting to SMTP server')
         if asbool(tg.config.get('smtp_ssl', False)):
             smtp_client = smtplib.SMTP_SSL(
                 tg.config.get('smtp_server', 'localhost'),
@@ -327,6 +341,7 @@ class SMTPClient:
                 timeout=float(tg.config.get('smtp_timeout', 10)),
             )
         if tg.config.get('smtp_user', None):
+            log.info('authenticating to SMTP server')
             smtp_client.login(tg.config['smtp_user'],
                               tg.config['smtp_password'])
         if asbool(tg.config.get('smtp_tls', False)):