#29140 closed Bug (fixed)
Exception sending EmailMessage with body=None
Reported by: | Alex Schokking | Owned by: | Williams Mendez |
---|---|---|---|
Component: | Core (Mail) | Version: | 1.11 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
This had been working fine on 1.9 but when we upgraded to 1.11 instantly started hitting an exception when django tries to call splitlines() on the None body without checking if there's a value there to split on.
File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py", line 348, in send return self.get_connection(fail_silently).send_messages([self]) File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py", line 111, in send_messages sent = self._send(message) File "/usr/local/lib/python2.7/dist-packages/django/core/mail/backends/smtp.py", line 125, in _send message = email_message.message() File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py", line 307, in message msg = SafeMIMEText(self.body, self.content_subtype, encoding) File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py", line 214, in __init__ MIMEText.__init__(self, _text, _subtype=_subtype, _charset=_charset) File "/usr/lib/python2.7/email/mime/text.py", line 30, in __init__ self.set_payload(_text, _charset) File "/usr/local/lib/python2.7/dist-packages/django/core/mail/message.py", line 224, in set_payload for l in payload.splitlines() AttributeError: 'NoneType' object has no attribute 'splitlines'
We've hacked around it by passing in an empty string instead but would probably be more elegant for this has_long_lines
logic to check if there's a value instead.
For context we're not passing in a body because we're attaching the plaintext and html versions of the email as a SafeMIMEMultipart attachment.
Change History (9)
comment:1 by , 7 years ago
Description: | modified (diff) |
---|---|
Type: | Uncategorized → Bug |
comment:2 by , 7 years ago
comment:3 by , 7 years ago
Hi,
Can you show how do you call EmailMessage?
If body=None the AttributeError will change to - 'NonType' object has no attribute 'encode' at some point. A long time ago.
My first hint is to set |self.body = body or ' ' (single_quotes_here)
Regards,
Herbert
comment:4 by , 7 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:5 by , 7 years ago
It is just a curiosity.
I got Django-1.9.13 put None in some tests.
I found one test that fails: test_send() line 625. Three times.
follow-up: 9 comment:6 by , 7 years ago
Tests do not fail.
EmailMessage does not raises errors
I am not dealing with python2.7 right.
comment:9 by , 7 years ago
Replying to Herbert Fortes:
Tests do not fail.
EmailMessage does not raises errors
I am not dealing with python2.7 right.
We were using Python 2.7 on this project
I'd like to contribute to this ticket.