Exemple #1
0
def test_parts(gm_client, latest, load_email):
    gm_client.add_emails([{'raw': binary('').as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ''
    assert m['body'] == ''
    assert m['body_txt'] is None

    raw = '<?xml version="1.0" encoding="UTF-8"?>'
    gm_client.add_emails([{'raw': binary(raw, 'text/html').as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['preview'] == ''
    assert m['body'] == ''

    gm_client.add_emails([{'raw': binary(' a  b\n   c d').as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ' a b c d'
    assert m['body'] == '<p>&nbsp;a&nbsp;&nbsp;b<br>&nbsp;&nbsp;&nbsp;c d</p>'

    raw = ('<p>'
           '<img data-style="test" />'
           '<img data-src="test" />'
           '<img data-style="color:blue" style="color:red" />'
           '<img src="test" />'
           '</p>')
    gm_client.add_emails([{'raw': binary(raw, 'text/html').as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['preview'] == ''
    assert m['body'] == '<p><img><img><img style="color:red"><img></p>'

    msg = binary('', 'application/json')
    msg.add_header('Content-Disposition', 'attachment; filename="1/f/ /.json"')
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{
        'filename': '1-f---.json',
        'path': '',
        'size': 0,
        'url': '/raw/5/1-f---.json',
    }]
    assert m['meta']['preview'] == '[1-f---.json]'
    assert m['body'] == ''

    msg = MIMEPart()
    msg.make_related()
    msg.attach(binary(' ', 'text/plain'))
    msg.attach(binary(' ', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ''
    assert m['body'] == ''

    msg = MIMEPart()
    msg.make_alternative()
    msg.attach(binary(' ', 'text/plain'))
    msg.attach(binary(' ', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ''
    assert m['body'] == ''

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('plain', 'text/plain'))
    msg.attach(binary('<p>html</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'plain html'
    assert m['body'] == '<p>plain</p><hr><p>html</p>'
    assert m['body_txt'] is None

    msg = MIMEPart()
    msg.make_alternative()
    msg.attach(binary('plain', 'text/plain'))
    msg.attach(binary('<p>html</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'html'
    assert m['body'] == '<p>html</p>'
    assert m['body_txt'] == 'plain'

    msg = MIMEPart()
    msg.make_alternative()
    msg.attach(binary('plain', 'text/plain'))
    htm = MIMEPart()
    htm.make_related()
    htm.attach(binary('<p>html</p>', 'text/html'))
    msg.attach(htm)
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'html'
    assert m['body'] == '<p>html</p>'
    assert m['body_txt'] == 'plain'

    msg1 = MIMEPart()
    msg1.make_mixed()
    msg1.attach(msg)
    msg1.attach(binary('<p>html2</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg1.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'html html2'
    assert m['body'] == '<p>html</p><hr><p>html2</p>'
    assert m['body_txt'] is None

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('<br>plain', 'text/plain'))
    msg.attach(binary('<p>html</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == '&lt;br&gt;plain html'
    assert m['body'] == '<p>&lt;br&gt;plain</p><hr><p>html</p>'
    assert m['body_txt'] is None

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('1', 'application/json'))
    msg.attach(binary('2', 'application/json'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{
        'filename':
        'unknown-%s.json' % p,
        'path':
        p,
        'size':
        1,
        'url':
        '/raw/%s/%s/unknown-%s.json' % (m['uid'], p, p),
    } for p in ('1', '2')]
    assert m['body'] == ''
    assert m['meta']['preview'] == '[unknown-1.json, unknown-2.json]'

    msg1 = MIMEPart()
    msg1.make_mixed()
    msg1.attach(binary('1'))
    msg1.attach(msg)
    gm_client.add_emails([{'raw': msg1.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{
        'filename':
        'unknown-%s.json' % p,
        'path':
        p,
        'size':
        1,
        'url':
        '/raw/%s/%s/unknown-%s.json' % (m['uid'], p, p),
    } for p in ('2.1', '2.2')]
    assert m['body'] == '<p>1</p>'
    assert m['meta']['preview'] == '1 [unknown-2.1.json, unknown-2.2.json]'

    msg2 = MIMEPart()
    msg2.make_mixed()
    msg2.attach(msg)
    msg2.attach(binary('0'))
    msg2.attach(msg1)
    gm_client.add_emails([{'raw': msg2.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{
        'filename':
        'unknown-%s.json' % p,
        'path':
        p,
        'size':
        1,
        'url':
        '/raw/%s/%s/unknown-%s.json' % (m['uid'], p, p),
    } for p in ('1.1', '1.2', '3.2.1', '3.2.2')]
    assert m['body'] == '<p>0<br><br>1</p>'

    # test some real emails with attachments
    m = load_email('msg-attachments-one-gmail.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [{
        'filename': '20.png',
        'image': True,
        'path': '2',
        'size': 544,
        'url': '/raw/16/2/20.png',
    }]
    assert '<hr>' not in m['body']
    assert 'ответ на тело' in m['body']

    m = load_email('msg-attachments-two-gmail.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [{
        'filename': '08.png',
        'image': True,
        'path': '2',
        'size': 553,
        'url': '/raw/17/2/08.png',
    }, {
        'filename': '09.png',
        'image': True,
        'path': '3',
        'size': 520,
        'url': '/raw/17/3/09.png',
    }]
    assert '<hr>' not in m['body']
    assert 'ответ на тело' in m['body']

    m = load_email('msg-attachments-two-yandex.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [{
        'filename': '49.png',
        'image': True,
        'path': '2',
        'size': 482,
        'url': '/raw/18/2/49.png',
    }, {
        'filename': '50.png',
        'image': True,
        'path': '3',
        'size': 456,
        'url': '/raw/18/3/50.png',
    }]
    assert 'ответ на тело' in m['body']

    m = load_email('msg-attachments-textfile.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [{
        'filename': 'Дополнение4.txt',
        'path': '2',
        'size': 11,
        'url': '/raw/19/2/Дополнение4.txt',
    }]
    assert m['body'] == '<p>тест</p>'

    m = load_email('msg-rfc822.txt', parsed=True)
    assert m['meta']['files'] == [{
        'filename': 'unknown-2.eml',
        'path': '2',
        'size': 463,
        'url': '/raw/20/2/unknown-2.eml',
    }]

    # test embeds
    m = load_email('msg-embeds-one-gmail.txt', parsed=True)
    assert m['meta']['files'] == [{
        'content-id': '<ii_jcrlk9sk0_16122eb711c529e8>',
        'filename': '50.png',
        'image': True,
        'path': '2',
        'size': 456,
        'url': '/raw/21/2/50.png',
    }]
    src = 'src="/raw/%s/2/50.png"' % m['meta']['origin_uid']
    assert src in m['body']
Exemple #2
0
def test_parts(gm_client, latest, load_email):
    gm_client.add_emails([{'raw': binary('').as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ''
    assert m['body'] == ''
    assert m['body_txt'] is None

    raw = '<?xml version="1.0" encoding="UTF-8"?>'
    gm_client.add_emails([{'raw': binary(raw, 'text/html').as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['preview'] == ''
    assert m['body'] == ''

    gm_client.add_emails([{'raw': binary(' a  b\n   c d').as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ' a b c d'
    assert m['body'] == '<p>&nbsp;a&nbsp;&nbsp;b<br>&nbsp;&nbsp;&nbsp;c d</p>'

    raw = (
        '<p>'
        '<img data-style="test" />'
        '<img data-src="test" />'
        '<img data-style="color:blue" style="color:red" />'
        '<img src="test" />'
        '</p>'
    )
    gm_client.add_emails([{'raw': binary(raw, 'text/html').as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['preview'] == ''
    assert m['body'] == '<p><img><img><img style="color:red"><img></p>'

    msg = binary('', 'application/json')
    msg.add_header('Content-Disposition', 'attachment; filename="1/f/ /.json"')
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': '1-f---.json',
            'path': '',
            'size': 0,
            'url': '/raw/5/1-f---.json',
        }
    ]
    assert m['meta']['preview'] == '[1-f---.json]'
    assert m['body'] == ''

    msg = MIMEPart()
    msg.make_related()
    msg.attach(binary(' ', 'text/plain'))
    msg.attach(binary(' ', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ''
    assert m['body'] == ''

    msg = MIMEPart()
    msg.make_alternative()
    msg.attach(binary(' ', 'text/plain'))
    msg.attach(binary(' ', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == ''
    assert m['body'] == ''

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('plain', 'text/plain'))
    msg.attach(binary('<p>html</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'plain html'
    assert m['body'] == '<p>plain</p><hr><p>html</p>'
    assert m['body_txt'] is None

    msg = MIMEPart()
    msg.make_alternative()
    msg.attach(binary('plain', 'text/plain'))
    msg.attach(binary('<p>html</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'html'
    assert m['body'] == '<p>html</p>'
    assert m['body_txt'] == 'plain'

    msg = MIMEPart()
    msg.make_alternative()
    msg.attach(binary('plain', 'text/plain'))
    htm = MIMEPart()
    htm.make_related()
    htm.attach(binary('<p>html</p>', 'text/html'))
    msg.attach(htm)
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'html'
    assert m['body'] == '<p>html</p>'
    assert m['body_txt'] == 'plain'

    msg1 = MIMEPart()
    msg1.make_mixed()
    msg1.attach(msg)
    msg1.attach(binary('<p>html2</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg1.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == 'html html2'
    assert m['body'] == '<p>html</p><hr><p>html2</p>'
    assert m['body_txt'] is None

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('<br>plain', 'text/plain'))
    msg.attach(binary('<p>html</p>', 'text/html'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']
    assert m['meta']['preview'] == '&lt;br&gt;plain html'
    assert m['body'] == '<p>&lt;br&gt;plain</p><hr><p>html</p>'
    assert m['body_txt'] is None

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('1', 'application/json'))
    msg.attach(binary('2', 'application/json'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': 'unknown-%s.json' % p,
            'path': p,
            'size': 1,
            'url': '/raw/%s/%s/unknown-%s.json' % (m['uid'], p, p),
        } for p in ('1', '2')
    ]
    assert m['body'] == ''
    assert m['meta']['preview'] == '[unknown-1.json, unknown-2.json]'

    msg1 = MIMEPart()
    msg1.make_mixed()
    msg1.attach(binary('1'))
    msg1.attach(msg)
    gm_client.add_emails([{'raw': msg1.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': 'unknown-%s.json' % p,
            'path': p,
            'size': 1,
            'url': '/raw/%s/%s/unknown-%s.json' % (m['uid'], p, p),
        } for p in ('2.1', '2.2')
    ]
    assert m['body'] == '<p>1</p>'
    assert m['meta']['preview'] == '1 [unknown-2.1.json, unknown-2.2.json]'

    msg2 = MIMEPart()
    msg2.make_mixed()
    msg2.attach(msg)
    msg2.attach(binary('0'))
    msg2.attach(msg1)
    gm_client.add_emails([{'raw': msg2.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': 'unknown-%s.json' % p,
            'path': p,
            'size': 1,
            'url': '/raw/%s/%s/unknown-%s.json' % (m['uid'], p, p),
        } for p in ('1.1', '1.2', '3.2.1', '3.2.2')
    ]
    assert m['body'] == '<p>0<br><br>1</p>'

    # test some real emails with attachments
    m = load_email('msg-attachments-one-gmail.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': '20.png',
            'image': True,
            'path': '2',
            'size': 544,
            'url': '/raw/16/2/20.png',
        }
    ]
    assert '<hr>' not in m['body']
    assert 'ответ на тело' in m['body']

    m = load_email('msg-attachments-two-gmail.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': '08.png',
            'image': True,
            'path': '2',
            'size': 553,
            'url': '/raw/17/2/08.png',
        },
        {
            'filename': '09.png',
            'image': True,
            'path': '3',
            'size': 520,
            'url': '/raw/17/3/09.png',
        }
    ]
    assert '<hr>' not in m['body']
    assert 'ответ на тело' in m['body']

    m = load_email('msg-attachments-two-yandex.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': '49.png',
            'image': True,
            'path': '2',
            'size': 482,
            'url': '/raw/18/2/49.png',
        },
        {
            'filename': '50.png',
            'image': True,
            'path': '3',
            'size': 456,
            'url': '/raw/18/3/50.png',
        }
    ]
    assert 'ответ на тело' in m['body']

    m = load_email('msg-attachments-textfile.txt', 'koi8-r', parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': 'Дополнение4.txt',
            'path': '2',
            'size': 11,
            'url': '/raw/19/2/Дополнение4.txt',
        }
    ]
    assert m['body'] == '<p>тест</p>'

    m = load_email('msg-rfc822.txt', parsed=True)
    assert m['meta']['files'] == [
        {
            'filename': 'unknown-2.eml',
            'path': '2',
            'size': 463,
            'url': '/raw/20/2/unknown-2.eml',
        }
    ]

    # test embeds
    m = load_email('msg-embeds-one-gmail.txt', parsed=True)
    assert m['meta']['files'] == [{
        'content-id': '<ii_jcrlk9sk0_16122eb711c529e8>',
        'filename': '50.png',
        'image': True,
        'path': '2',
        'size': 456,
        'url': '/raw/21/2/50.png',
    }]
    src = 'src="/raw/%s/2/50.png"' % m['meta']['origin_uid']
    assert src in m['body']
Exemple #3
0
def test_parts(gm_client, latest, load_email):
    msg = binary('1')
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert not m['meta']['files']

    msg = MIMEPart()
    msg.make_mixed()
    msg.attach(binary('1', 'application/json'))
    msg.attach(binary('2', 'application/json'))
    gm_client.add_emails([{'raw': msg.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{'path': p, 'size': 1} for p in ('1', '2')]

    msg1 = MIMEPart()
    msg1.make_mixed()
    msg1.attach(binary('1'))
    msg1.attach(msg)
    gm_client.add_emails([{'raw': msg1.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{
        'path': p,
        'size': 1
    } for p in ('2.1', '2.2')]

    msg2 = MIMEPart()
    msg2.make_mixed()
    msg2.attach(msg)
    msg2.attach(binary('2'))
    msg2.attach(msg1)
    gm_client.add_emails([{'raw': msg2.as_bytes()}])
    m = latest(parsed=True)
    assert m['meta']['files'] == [{
        'path': p,
        'size': 1
    } for p in ('1.1', '1.2', '3.2.1', '3.2.2')]

    # test some real emails with attachments
    m = load_email('msg-attachments-one-gmail.txt', parsed=True)
    assert m['meta']['files'] == [{
        'filename': '20.png',
        'path': '2',
        'size': 523
    }]

    m = load_email('msg-attachments-two-gmail.txt', parsed=True)
    assert m['meta']['files'] == [{
        'filename': '08.png',
        'path': '2',
        'size': 532
    }, {
        'filename': '09.png',
        'path': '3',
        'size': 503
    }]

    m = load_email('msg-attachments-two-yandex.txt', parsed=True)
    assert m['meta']['files'] == [{
        'filename': '49.png',
        'path': '2',
        'size': 472
    }, {
        'filename': '50.png',
        'path': '3',
        'size': 443
    }]

    # test embeds
    m = load_email('msg-embeds-one-gmail.txt', parsed=True)
    assert m['meta']['files'] == [{
        'content-id': '<ii_jcrlk9sk0_16122eb711c529e8>',
        'filename': '50.png',
        'path': '2',
        'size': 443
    }]
    url = '/raw/%s/2' % m['meta']['origin_uid']
    assert url in m['body']

    m = load_email('msg-embeds-external.txt', parsed=True)
    assert m['meta']['files'] == []
    assert 'data-src="/proxy?url=%2F%2Fwww.gravatar.com' in m['body']
    assert 'data-src="/proxy?url=http%3A%2F%2Fwww.gravatar.com' in m['body']
    assert 'data-src="/proxy?url=https%3A%2F%2Fwww.gravatar.com' in m['body']