Skip to content

Commit 5ac6f4e

Browse files
mchehabstephenfin
authored andcommitted
notifications.py: don't crash if notifications recipient is invalid
On Django 3:3.2.19, if recipient is not filled or is invalid, cron job fails with: Traceback (most recent call last): File "/usr/local/patchwork/./manage.py", line 17, in <module> execute_from_command_line(sys.argv) File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 419, in execute_from_command_line utility.execute() File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 398, in execute output = self.handle(*args, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/patchwork/patchwork/management/commands/cron.py", line 19, in handle errors = send_notifications() ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/patchwork/patchwork/notifications.py", line 84, in send_notifications message.send() File "/usr/lib/python3/dist-packages/django/core/mail/message.py", line 284, in send return self.get_connection(fail_silently).send_messages([self]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line 109, in send_messages sent = self._send(message) ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line 122, in _send recipients = [sanitize_address(addr, encoding) for addr in email_message.recipients()] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line 122, in <listcomp> recipients = [sanitize_address(addr, encoding) for addr in email_message.recipients()] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/django/core/mail/message.py", line 99, in sanitize_address address_parts = nm + localpart + domain ~~~^~~~~~~~~~~ TypeError: can only concatenate str (not "NoneType") to str As there's no point trying to send a notification to an invalid e-mail, just drops it. Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
1 parent 035ef32 commit 5ac6f4e

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

patchwork/notifications.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ def delete_notifications():
7373
'patchwork/mails/patch-change-notification.txt', context
7474
)
7575

76+
# Got one case where recipient.email == "<>". That causes Django to fail with:
77+
# File "/usr/lib/python3/dist-packages/django/core/mail/message.py", line 99, in sanitize_address
78+
# address_parts = nm + localpart + domain
79+
# ~~~^~~~~~~~~~~
80+
# TypeError: can only concatenate str (not "NoneType") to str
81+
if not recipient.email or recipient.email == "<>" or recipient.email == "":
82+
errors.append((recipient, "Invalid recipient"))
83+
delete_notifications()
84+
continue
85+
7686
message = EmailMessage(
7787
subject=subject,
7888
body=content,

0 commit comments

Comments
 (0)