summaryrefslogtreecommitdiff
path: root/tests/mail
diff options
context:
space:
mode:
authorFlorian Apolloner <florian@apolloner.eu>2014-10-09 14:18:31 +0200
committerFlorian Apolloner <florian@apolloner.eu>2014-10-12 22:01:24 +0200
commit8d789449c7861b8cf8b10d244f26d9d354989aaf (patch)
treef033271e7ca0e062fa85f345bd642aea06393b07 /tests/mail
parent6448dd833524ac3fc503506b624841c9d642de8a (diff)
downloaddjango-8d789449c7861b8cf8b10d244f26d9d354989aaf.tar.gz
Fixed #23063 -- Convert \n and \r to \r\n when using the SMTP backend as per RFC.
Diffstat (limited to 'tests/mail')
-rw-r--r--tests/mail/tests.py36
1 files changed, 35 insertions, 1 deletions
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