def test_multiple_message_call(): """Make sure that headers are not changed when calling `EmailMessage.render()` again. """ email = EmailMessage('Subject', 'Content', '*****@*****.**', '*****@*****.**', headers={'From': '*****@*****.**'}) message = email.render() assert message['From'] == '*****@*****.**' message = email.render() assert message['From'] == '*****@*****.**'
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' email.render()
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.render() assert message['To'] == '=?utf-8?q?Firstname_S=C3=BCrname?= <*****@*****.**>, [email protected]' email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '"Sürname, Firstname" <*****@*****.**>']) message = email.render() assert message['To'] == '[email protected], =?utf-8?q?S=C3=BCrname=2C_Firstname?= <*****@*****.**>'
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.render() 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_multiple_recipients(): email = EmailMessage('Subject', 'Content', '*****@*****.**', ['*****@*****.**', '*****@*****.**']) message = email.render() assert message['Subject'] == '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.render() assert message['Subject'] == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == '*****@*****.**' assert message['To'] == '*****@*****.**'
def test_invalid_destination(): dest = 'toБ@example.com' email = EmailMessage('Subject', 'Content', '*****@*****.**', dest) message = email.render() assert message['Subject'] == 'Subject' assert message.get_payload() == 'Content' assert message['From'] == '*****@*****.**' assert message['To'] != dest
def test_cc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', cc='*****@*****.**') message = email.render() assert message['Cc'] == '*****@*****.**' assert not message['To'] assert not message['Bcc'] assert email.get_recipients() == ['*****@*****.**']
def test_from_header(): """Make sure we can manually set the From header. """ email = EmailMessage('Subject', 'Content', '*****@*****.**', '*****@*****.**', headers={'From': '*****@*****.**'}) message = email.render() 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.render() assert message[ 'To'] == '=?utf-8?q?Firstname_S=C3=BCrname?= <*****@*****.**>, [email protected]' email = EmailMessage( 'Subject', 'Content', '*****@*****.**', ['*****@*****.**', '"Sürname, Firstname" <*****@*****.**>']) message = email.render() assert message[ 'To'] == '[email protected], =?utf-8?q?S=C3=BCrname=2C_Firstname?= <*****@*****.**>'
def test_multiple_bcc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', bcc=['*****@*****.**', '*****@*****.**']) message = email.render() assert not message['To'] assert not message['Cc'] assert not message['Bcc'] # as it should assert email.get_recipients() == ['*****@*****.**', '*****@*****.**']
def test_multiple_replyto(): email = EmailMessage('Subject', 'Content', '*****@*****.**', reply_to=['*****@*****.**', '*****@*****.**']) message = email.render() assert message['Reply-To'] == '[email protected], [email protected]' assert not message['To'] assert not message['Cc'] assert not message['Bcc'] # as it should assert email.get_recipients() == []
def test_multiple_cc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', cc=['*****@*****.**', '*****@*****.**']) message = email.render() print(message['Cc']) assert message['Cc'] == '[email protected], [email protected]' assert not message['To'] assert not message['Bcc'] assert email.get_recipients() == ['*****@*****.**', '*****@*****.**']
def test_bcc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', bcc='*****@*****.**') message = email.render() assert not message['To'] assert not message['Cc'] assert not message['Bcc'] # as it should assert email.get_recipients() == ['*****@*****.**']
def test_replyto(): email = EmailMessage('Subject', 'Content', '*****@*****.**', reply_to='*****@*****.**') message = email.render() assert message['Reply-To'] == '*****@*****.**' assert not message['To'] assert not message['Cc'] assert not message['Bcc'] # as it should 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.render() 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_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.render() 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.render() 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_to_cc_bcc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', to=['*****@*****.**', '*****@*****.**'], cc=['*****@*****.**', '*****@*****.**'], bcc=['*****@*****.**', '*****@*****.**']) message = email.render() assert message['To'] == '[email protected], [email protected]' assert message['Cc'] == '[email protected], [email protected]' assert message['Bcc'] == '[email protected], [email protected]' assert email.get_recipients() == [ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', ]
def test_recipients_as_tuple(): email = EmailMessage('Subject', 'Content', '*****@*****.**', to=('*****@*****.**', '*****@*****.**'), cc=('*****@*****.**', '*****@*****.**'), bcc=('*****@*****.**',)) message = email.render() assert message['To'] == '[email protected], [email protected]' assert message['Cc'] == '[email protected], [email protected]' assert not message['Bcc'] # as it should assert email.get_recipients() == [ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', ]
def test_space_continuation(): """Test for space continuation character in long (ascii) subject headers. """ if not PY2: return 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.render() 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_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.render() 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.render() 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.render() 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_recipients_as_tuple(): email = EmailMessage('Subject', 'Content', '*****@*****.**', to=('*****@*****.**', '*****@*****.**'), cc=('*****@*****.**', '*****@*****.**'), bcc=('*****@*****.**', )) message = email.render() assert message['To'] == '[email protected], [email protected]' assert message['Cc'] == '[email protected], [email protected]' assert not message['Bcc'] # as it should assert email.get_recipients() == [ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', ]
def test_multiple_to_cc_bcc(): email = EmailMessage('Subject', 'Content', '*****@*****.**', to=['*****@*****.**', '*****@*****.**'], cc=['*****@*****.**', '*****@*****.**'], bcc=['*****@*****.**', '*****@*****.**']) message = email.render() assert message['To'] == '[email protected], [email protected]' assert message['Cc'] == '[email protected], [email protected]' assert not message['Bcc'] # as it should assert email.get_recipients() == [ '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', '*****@*****.**', ]
def test_header_injection(): email = EmailMessage('Subject\nInjection Test', 'Content', '*****@*****.**', '*****@*****.**') with pytest.raises(ValueError): email.render()