datatracker/pyzmail/tests/test_both.py

100 lines
4.1 KiB
Python

import unittest
import pyzmail
from pyzmail.generate import *
from pyzmail.parse import *
class TestBoth(unittest.TestCase):
def setUp(self):
pass
def test_compose_and_parse(self):
"""test generate and parse"""
sender=('Me', 'me@foo.com')
recipients=[('Him', 'him@bar.com'), 'just@me.com']
subject='Le sujet en Fran\xe7ais'
text_content='Bonjour aux Fran\xe7ais'
prefered_encoding='iso-8859-1'
text_encoding='iso-8859-1'
attachments=[('attached content', 'text', 'plain', 'textfile1.txt', 'us-ascii'),
('Fran\xe7ais', 'text', 'plain', 'textfile2.txt', 'iso-8859-1'),
('Fran\xe7ais', 'text', 'plain', 'textfile3.txt', 'iso-8859-1'),
(b'image', 'image', 'jpg', 'imagefile.jpg', None),
]
embeddeds=[('embedded content', 'text', 'plain', 'embedded', 'us-ascii'),
(b'picture', 'image', 'png', 'picture', None),
]
headers=[ ('X-extra', 'extra value'), ('X-extra2', "Seconde ent\xe8te"), ('X-extra3', 'last extra'),]
message_id_string='pyzmail'
date=1313558269
payload, mail_from, rcpt_to, msg_id=pyzmail.compose_mail(\
sender, \
recipients, \
subject, \
prefered_encoding, \
(text_content, text_encoding), \
html=None, \
attachments=attachments, \
embeddeds=embeddeds, \
headers=headers, \
message_id_string=message_id_string, \
date=date\
)
msg=PyzMessage.factory(payload)
self.assertEqual(sender, msg.get_address('from'))
self.assertEqual(recipients[0], msg.get_addresses('to')[0])
self.assertEqual(recipients[1], msg.get_addresses('to')[1][1])
self.assertEqual(subject, msg.get_subject())
self.assertEqual(subject, msg.get_decoded_header('subject'))
# try to handle different timezone carefully
mail_date=list(email.utils.parsedate(msg.get_decoded_header('date')))
self.assertEqual(mail_date[:6], list(time.localtime(date))[:6])
self.assertNotEqual(msg.get('message-id').find(message_id_string), -1)
for name, value in headers:
self.assertEqual(value, msg.get_decoded_header(name))
for mailpart in msg.mailparts:
if mailpart.is_body:
self.assertEqual(mailpart.content_id, None)
self.assertEqual(mailpart.filename, None)
self.assertEqual(type(mailpart.sanitized_filename), str)
if mailpart.type=='text/plain':
self.assertEqual(mailpart.get_payload(), text_content.encode(text_encoding))
else:
self.fail('found unknown body part')
else:
if mailpart.filename:
lst=attachments
self.assertEqual(mailpart.filename, mailpart.sanitized_filename)
self.assertEqual(mailpart.content_id, None)
elif mailpart.content_id:
lst=embeddeds
self.assertEqual(mailpart.filename, None)
else:
self.fail('found unknown part')
found=False
for attach in lst:
found=(mailpart.filename and attach[3]==mailpart.filename) \
or (mailpart.content_id and attach[3]==mailpart.content_id)
if found:
break
if found:
self.assertEqual(mailpart.type, attach[1]+'/'+attach[2])
payload=mailpart.get_payload()
if attach[1]=='text' and attach[4] and isinstance(attach[0], str):
payload=payload.decode(attach[4])
self.assertEqual(payload, attach[0])
else:
self.fail('found unknown attachment')