def test_encoding(): """Encode body correctly with other encodings than utf-8 """ email = EmailMessage('Subject', 'Firstname Sürname is a great guy.', '*****@*****.**', '*****@*****.**') email.encoding = 'iso-8859-1' message = email.message() assert message.as_string().startswith('Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: [email protected]\nTo: [email protected]') assert message.get_payload() == 'Firstname S=FCrname is a great guy.' # Make sure MIME attachments also works correctly with other encodings than utf-8 text_content = 'Firstname Sürname is a great guy.' html_content = '<p>Firstname Sürname is a <strong>great</strong> guy.</p>' email = EmailMessage('Subject', text_content, '*****@*****.**', '*****@*****.**', html_content=html_content) email.encoding = 'iso-8859-1' message = email.message() assert message.get_payload(0).as_string() == \ 'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nFirstname S=FCrname is a great guy.' assert message.get_payload(1).as_string() == \ 'Content-Type: text/html; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\n<p>Firstname S=FCrname is a <strong>great</strong> guy.</p>'
def test_multiple_message_call(): """Make sure that headers are not changed when calling `EmailMessage.message()` again. """ email = EmailMessage('Subject', 'Content', '*****@*****.**', '*****@*****.**', headers={'From': '*****@*****.**'}) message = email.message() assert message['From'] == '*****@*****.**' message = email.message() assert message['From'] == '*****@*****.**'
def test_unicode_address_header(): """When a to/from/cc header contains unicode, make sure the email addresses are parsed correctly (especially with regards to commas). """ email = EmailMessage('Subject', 'Content', '*****@*****.**', ['"Firstname Sürname" <*****@*****.**>', '*****@*****.**']) message = email.message() assert message['To'] == '=?utf-8?q?Firstname_S=C3=BCrname?= <*****@*****.**>, [email protected]' email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '"Sürname, Firstname" <*****@*****.**>']) message = email.message() assert message['To'] == '[email protected], =?utf-8?q?S=C3=BCrname=2C_Firstname?= <*****@*****.**>'
def test_cc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', '*****@*****.**', cc='*****@*****.**') message = email.message() assert message['Cc'] == '*****@*****.**' assert email.get_recipients() == ['*****@*****.**', '*****@*****.**']
def test_space_continuation(): """Test for space continuation character in long (ascii) subject headers. """ email = EmailMessage('Long subject lines that get wrapped should use a space continuation character to get expected behaviour in Outlook and Thunderbird', 'Content', '*****@*****.**', '*****@*****.**') message = email.message() assert message['Subject'] == 'Long subject lines that get wrapped should use a space continuation\n character to get expected behaviour in Outlook and Thunderbird'
def test_from_header(): """Make sure we can manually set the From header. """ email = EmailMessage('Subject', 'Content', '*****@*****.**', '*****@*****.**', headers={'From': '*****@*****.**'}) message = email.message() assert message['From'] == '*****@*****.**'
def test_multiple_cc_and_to(): email = EmailMessage('Subject', 'Content', '*****@*****.**', to=['*****@*****.**', '*****@*****.**'], cc=['*****@*****.**', '*****@*****.**']) message = email.message() assert message['Cc'] == '[email protected], [email protected]' assert email.get_recipients() == ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']
def test_multiple_recipients(): email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**']) message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == '*****@*****.**' assert message['To'] == '[email protected], [email protected]'
def test_ascii(): email = EmailMessage('Subject', 'Content', '*****@*****.**', '*****@*****.**') message = email.message() assert message['Subject'].encode() == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == '*****@*****.**' assert message['To'] == '*****@*****.**'
def test_recipients_as_tuple(): email = EmailMessage('Subject', 'Content', '*****@*****.**', to=('*****@*****.**', '*****@*****.**'), cc=('*****@*****.**', '*****@*****.**'), bcc=('*****@*****.**',)) message = email.message() assert message['Cc'] == '[email protected], [email protected]' assert email.get_recipients() == ['*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**']
def test_unicode_headers(): headers={ 'Sender': '"Firstname Sürname" <*****@*****.**>', 'Comments': 'My Sürname is non-ASCII', } email = EmailMessage(u"Gżegżółka", "Content", "*****@*****.**", "*****@*****.**", headers=headers) message = email.message() assert message['Subject'] == '=?utf-8?b?R8W8ZWfFvMOzxYJrYQ==?=' assert message['Sender'] == '=?utf-8?q?Firstname_S=C3=BCrname?= <*****@*****.**>' assert message['Comments'] == '=?utf-8?q?My_S=C3=BCrname_is_non-ASCII?='
def test_html(): subject = 'hello' from_email = '*****@*****.**' to = '*****@*****.**' text_content = 'This is an important message.' html_content = '<p>This is an <strong>important</strong> message.</p>' email = EmailMessage(subject, text_content, from_email, to, html_content=html_content) message = email.message() assert message.is_multipart() assert message.get_content_type() == 'multipart/alternative' assert message.get_default_type() == 'text/plain' assert message.get_payload(0).get_content_type() == 'text/plain' assert message.get_payload(1).get_content_type() == 'text/html'
def test_attachments(): subject = 'hello' from_email = '*****@*****.**' to = '*****@*****.**' text_content = 'This is an important message.' html_content = '<p>This is an <strong>important</strong> message.</p>' email = EmailMessage(subject, text_content, from_email, to, html_content=html_content) email.attach('an attachment.pdf', '%PDF-1.4.%...', mimetype='application/pdf') message = email.message() assert message.is_multipart() assert message.get_content_type() == 'multipart/mixed' assert message.get_default_type() == 'text/plain' assert message.get_payload(0).get_content_type() == 'multipart/alternative' assert message.get_payload(1).get_content_type() == 'application/pdf'
def test_safe_mime_multipart(): """Make sure headers can be set with a different encoding than utf-8 in SafeMIMEMultipart as well """ subject = 'Message from Firstname Sürname' from_email = '*****@*****.**' to = '"Sürname, Firstname" <*****@*****.**>' text_content = 'This is an important message.' html_content = '<p>This is an <strong>important</strong> message.</p>' headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"} email = EmailMessage(subject, text_content, from_email, to, html_content=html_content, headers=headers) email.encoding = 'iso-8859-1' message = email.message() assert message['To'] == '=?iso-8859-1?q?S=FCrname=2C_Firstname?= <*****@*****.**>' assert message['Subject'].encode() == u'=?iso-8859-1?q?Message_from_Firstname_S=FCrname?='
def test_header_injection(): email = EmailMessage('Subject\nInjection Test', 'Content', '*****@*****.**', '*****@*****.**') with pytest.raises(ValueError): email.message()