100 lines
4.1 KiB
Python
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')
|
|
|
|
|