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> a b<br> 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'] == '<br>plain html' assert m['body'] == '<p><br>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']
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> a b<br> 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'] == '<br>plain html' assert m['body'] == '<p><br>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']
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']