[PATCH 4 of 6] e-mail: properly handle no recipients when there is no email_to set
Thomas De Schampheleire
patrickdepinguin at gmail.com
Sun Aug 2 20:51:38 UTC 2015
# HG changeset patch
# User Thomas De Schampheleire <thomas.de.schampheleire at gmail.com>
# Date 1438543505 -7200
# Sun Aug 02 21:25:05 2015 +0200
# Node ID c758464b9b91693580cb6927a1b37a02f2bf334b
# Parent 8929f6591543076d718674a621feac1060a1a7e7
e-mail: properly handle no recipients when there is no email_to set
When the configuration file does not contain a value for email_to, and no
recipients are specified in a call to send_email, recipients would be set to
[None, admins]
which causes an error when logging this list as ' '.join(recipients).
diff --git a/kallithea/lib/celerylib/tasks.py b/kallithea/lib/celerylib/tasks.py
--- a/kallithea/lib/celerylib/tasks.py
+++ b/kallithea/lib/celerylib/tasks.py
@@ -267,9 +267,16 @@ def send_email(recipients, subject, body
if not recipients:
# if recipients are not defined we send to email_config + all admins
- admins = [u.email for u in User.query()
- .filter(User.admin == True).all()]
- recipients = [email_config.get('email_to')] + admins
+ recipients = [u.email for u in User.query()
+ .filter(User.admin == True).all()]
+ if email_config.get('email_to') is not None:
+ recipients += [email_config.get('email_to')]
+
+ # If there are still no recipients, there are no admins and no address
+ # configured in email_to, so return.
+ if not recipients:
+ log.error("No recipients specified and no fallback available.")
+ return False
log.warning("No recipients specified for '%s' - sending to admins %s", subject, ' '.join(recipients))
diff --git a/kallithea/tests/other/test_mail.py b/kallithea/tests/other/test_mail.py
--- a/kallithea/tests/other/test_mail.py
+++ b/kallithea/tests/other/test_mail.py
@@ -68,3 +68,25 @@ class TestMail(BaseTestCase):
self.assertIn('Subject: %s' % subject, smtplib_mock.lastmsg)
self.assertIn(body, smtplib_mock.lastmsg)
self.assertIn(html_body, smtplib_mock.lastmsg)
+
+ def test_send_mail_no_recipients_no_email_to(self):
+ mailserver = 'smtp.mailserver.org'
+ recipients = []
+ envelope_from = 'noreply at mailserver.org'
+ subject = 'subject'
+ body = 'body'
+ html_body = 'html_body'
+
+ config_mock = {
+ 'smtp_server': mailserver,
+ 'app_email_from': envelope_from,
+ }
+ with mock.patch('kallithea.lib.celerylib.tasks.config', config_mock):
+ kallithea.lib.celerylib.tasks.send_email(recipients, subject, body, html_body)
+
+ self.assertSetEqual(smtplib_mock.lastdest, set([TEST_USER_ADMIN_EMAIL]))
+ self.assertEqual(smtplib_mock.lastsender, envelope_from)
+ self.assertIn('From: %s' % envelope_from, smtplib_mock.lastmsg)
+ self.assertIn('Subject: %s' % subject, smtplib_mock.lastmsg)
+ self.assertIn(body, smtplib_mock.lastmsg)
+ self.assertIn(html_body, smtplib_mock.lastmsg)
More information about the kallithea-general
mailing list