Exemple #1
0
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'] == '*****@*****.**'
Exemple #2
0
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'] == '*****@*****.**'
Exemple #3
0
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()
Exemple #4
0
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?= <*****@*****.**>'
Exemple #5
0
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'
Exemple #6
0
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]')
Exemple #7
0
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'] == '*****@*****.**'
Exemple #8
0
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'] == '*****@*****.**'
Exemple #9
0
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
Exemple #10
0
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]')
Exemple #11
0
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() == ['*****@*****.**']
Exemple #12
0
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
Exemple #13
0
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'] == '*****@*****.**'
Exemple #14
0
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?= <*****@*****.**>'
Exemple #15
0
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() == ['*****@*****.**', '*****@*****.**']
Exemple #16
0
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() == []
Exemple #17
0
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()
Exemple #18
0
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() == ['*****@*****.**', '*****@*****.**']
Exemple #19
0
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() == ['*****@*****.**']
Exemple #20
0
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'] == '*****@*****.**'
Exemple #21
0
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() == ['*****@*****.**']
Exemple #22
0
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() == []
Exemple #23
0
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?='
Exemple #24
0
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() == ['*****@*****.**', '*****@*****.**']
Exemple #25
0
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>')
Exemple #26
0
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>')
Exemple #27
0
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() == [
        '*****@*****.**', '*****@*****.**',
        '*****@*****.**', '*****@*****.**',
        '*****@*****.**', '*****@*****.**',
    ]
Exemple #28
0
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() == [
        '*****@*****.**', '*****@*****.**',
        '*****@*****.**', '*****@*****.**',
        '*****@*****.**',
    ]
Exemple #29
0
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')
Exemple #30
0
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?='
Exemple #31
0
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'
Exemple #32
0
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'
Exemple #33
0
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'
Exemple #34
0
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() == [
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
    ]
Exemple #35
0
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() == [
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
        '*****@*****.**',
    ]
Exemple #36
0
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'
Exemple #37
0
def test_header_injection():
    email = EmailMessage('Subject\nInjection Test', 'Content',
                         '*****@*****.**', '*****@*****.**')
    with pytest.raises(ValueError):
        email.render()
Exemple #38
0
def test_header_injection():
    email = EmailMessage('Subject\nInjection Test', 'Content',
                         '*****@*****.**', '*****@*****.**')
    with pytest.raises(ValueError):
        email.render()