From 8d789449c7861b8cf8b10d244f26d9d354989aaf Mon Sep 17 00:00:00 2001 From: Florian Apolloner Date: Thu, 9 Oct 2014 14:18:31 +0200 Subject: Fixed #23063 -- Convert \n and \r to \r\n when using the SMTP backend as per RFC. --- tests/mail/tests.py | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'tests/mail') diff --git a/tests/mail/tests.py b/tests/mail/tests.py index df6daee5c8..ccfdc6c669 100644 --- a/tests/mail/tests.py +++ b/tests/mail/tests.py @@ -9,7 +9,7 @@ import smtpd import sys import tempfile import threading -from smtplib import SMTPException +from smtplib import SMTPException, SMTP from ssl import SSLError from django.core import mail @@ -1038,3 +1038,37 @@ class SMTPBackendTests(BaseEmailBackendTests, SimpleTestCase): def test_email_timeout_override_settings(self): backend = smtp.EmailBackend() self.assertEqual(backend.timeout, 10) + + def test_email_msg_uses_crlf(self): + """#23063 -- Test that RFC-compliant messages are sent over SMTP.""" + send = SMTP.send + try: + smtp_messages = [] + + def mock_send(self, s): + smtp_messages.append(s) + return send(self, s) + + SMTP.send = mock_send + + email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com']) + mail.get_connection().send_messages([email]) + + # Find the actual message + msg = None + for i, m in enumerate(smtp_messages): + if m[:4] == 'data': + msg = smtp_messages[i+1] + break + + self.assertTrue(msg) + + if PY3: + msg = msg.decode('utf-8') + # Ensure that the message only contains CRLF and not combinations of CRLF, LF, and CR. + msg = msg.replace('\r\n', '') + self.assertNotIn('\r', msg) + self.assertNotIn('\n', msg) + + finally: + SMTP.send = send -- cgit v1.2.1