Lines Matching refs:msg
59 msg = self._msgobj('msg_20.txt')
60 eq(msg.get_all('cc'), ['ccc@zzz.org', 'ddd@zzz.org', 'eee@zzz.org'])
61 eq(msg.get_all('xx', 'n/a'), 'n/a')
65 msg = Message()
66 eq(msg.get_charset(), None)
68 msg.set_charset(charset)
69 eq(msg['mime-version'], '1.0')
70 eq(msg.get_content_type(), 'text/plain')
71 eq(msg['content-type'], 'text/plain; charset="iso-8859-1"')
72 eq(msg.get_param('charset'), 'iso-8859-1')
73 eq(msg['content-transfer-encoding'], 'quoted-printable')
74 eq(msg.get_charset().input_charset, 'iso-8859-1')
76 msg.set_charset(None)
77 eq(msg.get_charset(), None)
78 eq(msg['content-type'], 'text/plain')
80 msg = Message()
81 msg['MIME-Version'] = '2.0'
82 msg['Content-Type'] = 'text/x-weird'
83 msg['Content-Transfer-Encoding'] = 'quinted-puntable'
84 msg.set_charset(charset)
85 eq(msg['mime-version'], '2.0')
86 eq(msg['content-type'], 'text/x-weird; charset="iso-8859-1"')
87 eq(msg['content-transfer-encoding'], 'quinted-puntable')
91 msg = Message()
92 msg.set_charset('us-ascii')
93 eq(msg.get_charset().input_charset, 'us-ascii')
94 eq(msg['content-type'], 'text/plain; charset="us-ascii"')
97 msg = Message()
99 msg.set_payload('This is a string payload', charset)
100 self.assertEqual(msg.get_charset().input_charset, 'iso-8859-1')
105 msg = Message()
106 msg.set_payload(data, charset)
107 self.assertEqual(msg['content-transfer-encoding'], 'base64')
108 self.assertEqual(msg.get_payload(decode=True), data)
109 self.assertEqual(msg.get_payload(), '0JDQkdCS\n')
115 msg = Message()
116 msg.set_payload(data.decode('utf-8'), charset)
117 self.assertEqual(msg['content-transfer-encoding'], '8bit')
118 self.assertEqual(msg.get_payload(decode=True), data)
124 msg = Message()
125 msg.set_payload(data, charset)
126 self.assertEqual(msg['content-transfer-encoding'], '8bit')
127 self.assertEqual(msg.get_payload(decode=True), data)
130 msg = Message()
131 msg.set_payload([])
132 self.assertEqual(msg.get_payload(), [])
135 msg = Message()
136 msg['Content-Type'] = 'multipart/mixed'
137 msg.set_payload('string payload')
140 msg.attach, sub_msg)
145 msg = self._msgobj('msg_08.txt')
146 charsets = msg.get_charsets()
149 msg = self._msgobj('msg_09.txt')
150 charsets = msg.get_charsets('dingbat')
154 msg = self._msgobj('msg_12.txt')
155 charsets = msg.get_charsets()
162 msg = self._msgobj('msg_04.txt')
163 filenames = [p.get_filename() for p in msg.get_payload()]
164 eq(filenames, ['msg.txt', 'msg.txt'])
166 msg = self._msgobj('msg_07.txt')
167 subpart = msg.get_payload(1)
173 msg = self._msgobj('msg_44.txt')
174 filenames = [p.get_filename() for p in msg.get_payload()]
175 eq(filenames, ['msg.txt', 'msg.txt'])
179 msg = self._msgobj('msg_07.txt')
181 eq(msg.get_boundary(), 'BOUNDARY')
187 msg = self._msgobj('msg_01.txt')
188 msg.set_boundary('BOUNDARY')
189 header, value = msg.items()[4]
195 msg = self._msgobj('msg_04.txt')
196 msg.set_boundary('BOUNDARY')
197 header, value = msg.items()[4]
201 msg = self._msgobj('msg_03.txt')
203 msg.set_boundary, 'BOUNDARY')
206 msg = MIMEMultipart('form-data')
209 self.assertEqual(msg.items()[0][1], 'multipart/form-data')
211 msg.as_string()
212 self.assertEqual(msg.items()[0][1][:33],
222 msg = parser.parsestr(msgdata)
225 gen.flatten(msg, False)
233 msg = parser.parsebytes(msgdata)
236 gen.flatten(msg)
241 msg = self._msgobj('msg_10.txt')
243 eq(msg.get_payload(decode=True), None)
245 eq(msg.get_payload(0).get_payload(decode=True),
248 eq(msg.get_payload(1).get_payload(decode=True),
251 eq(msg.get_payload(2).get_payload(decode=True),
255 eq(msg.get_payload(3).get_payload(decode=True),
258 eq(msg.get_payload(4).get_payload(decode=True),
263 msg = Message()
264 msg.set_payload('begin 666 -\n+:&5L;&\\@=V]R;&0 \n \nend\n')
266 msg['content-transfer-encoding'] = cte
267 eq(msg.get_payload(decode=True), b'hello world')
269 msg.set_payload('foo')
270 eq(msg.get_payload(decode=True), b'foo')
273 msg = Message()
274 self.assertRaises(TypeError, msg.get_payload, 1)
278 msg = self._msgobj('msg_07.txt')
283 g.flatten(msg)
287 msg = Message()
288 msg['From'] = 'Me'
289 msg['to'] = 'You'
291 self.assertIn('from', msg)
292 self.assertIn('From', msg)
293 self.assertIn('FROM', msg)
294 self.assertIn('to', msg)
295 self.assertIn('To', msg)
296 self.assertIn('TO', msg)
299 msg = self._msgobj('msg_01.txt')
302 self.assertEqual(text, str(msg))
303 fullrepr = msg.as_string(unixfrom=True)
309 msg = self._msgobj('msg_01.txt')
310 newpolicy = msg.policy.clone(linesep='\r\n')
311 fullrepr = msg.as_string(policy=newpolicy)
314 g.flatten(msg)
336 msg = email.message_from_bytes(source)
337 self.assertEqual(msg.as_string(), expected)
349 msg = email.message_from_bytes(source)
350 self.assertEqual(msg.as_string(), expected)
353 msg = self._msgobj('msg_01.txt')
356 self.assertEqual(data, bytes(msg))
357 fullrepr = msg.as_bytes(unixfrom=True)
363 msg = self._msgobj('msg_01.txt')
364 newpolicy = msg.policy.clone(linesep='\r\n')
365 fullrepr = msg.as_bytes(policy=newpolicy)
368 g.flatten(msg)
373 msg = email.message_from_string("Content-Type: blarg; baz; boo\n")
374 self.assertEqual(msg.get_param('baz'), '')
377 msg = email.message_from_string("From: foo\n")
378 self.assertEqual(msg.get_filename(), None)
381 msg = email.message_from_string(
383 self.assertEqual(msg.get_filename(), '')
386 msg = email.message_from_string("From: foo\n")
387 self.assertEqual(msg.get_boundary(), None)
391 msg = email.message_from_string(
393 eq(msg.get_params(header='x-header'),
395 msg = email.message_from_string(
397 eq(msg.get_params(header='x-header'),
399 eq(msg.get_params(), None)
400 msg = email.message_from_string(
402 eq(msg.get_params(header='x-header'),
407 msg = Message()
408 msg['Content-Type'] = 'Content-Type: Multipart/mixed; boundary = "CPIMSSMTPC06p5f3tG"'
409 self.assertEqual(msg.get_param('boundary'), 'CPIMSSMTPC06p5f3tG')
413 msg = email.message_from_string(
415 eq(msg.get_param('bar', header='x-header'), 'two')
416 eq(msg.get_param('quuz', header='x-header'), None)
417 eq(msg.get_param('quuz'), None)
418 msg = email.message_from_string(
420 eq(msg.get_param('foo', header='x-header'), '')
421 eq(msg.get_param('bar', header='x-header'), 'one')
422 eq(msg.get_param('baz', header='x-header'), 'two')
424 # msg["Content-Type"] = 'text/plain; weird="hey; dolly? [you] @ <\\"home\\">?"'
425 # msg.get_param("weird")
430 msg = self._msgobj('msg_22.txt')
431 self.assertEqual(msg.get_payload(1).get_param('name'), 'wibble.JPG')
435 msg = email.message_from_string(
437 self.assertEqual(msg.get_param('name'), 'Jim&&Jill')
438 self.assertEqual(msg.get_param('name', unquote=False),
443 msg = email.message_from_string(
445 self.assertEqual(msg.get_param('bar'), 'baz"foobar"baz')
446 msg = email.message_from_string(
448 self.assertEqual(msg.get_param('bar'), 'baz"foobar"baz')
451 msg = email.message_from_string('Header: exists')
452 self.assertIn('header', msg)
453 self.assertIn('Header', msg)
454 self.assertIn('HEADER', msg)
455 self.assertNotIn('headerx', msg)
459 msg = Message()
460 msg.set_param('charset', 'iso-2022-jp')
461 eq(msg.get_param('charset'), 'iso-2022-jp')
462 msg.set_param('importance', 'high value')
463 eq(msg.get_param('importance'), 'high value')
464 eq(msg.get_param('importance', unquote=False), '"high value"')
465 eq(msg.get_params(), [('text/plain', ''),
468 eq(msg.get_params(unquote=False), [('text/plain', ''),
471 msg.set_param('charset', 'iso-9999-xx', header='X-Jimmy')
472 eq(msg.get_param('charset', header='X-Jimmy'), 'iso-9999-xx')
476 msg = self._msgobj('msg_05.txt')
477 eq(msg.get_params(),
480 old_val = msg.get_param("report-type")
481 msg.del_param("report-type")
482 eq(msg.get_params(),
485 msg.set_param("report-type", old_val)
486 eq(msg.get_params(),
492 msg = Message()
493 msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')
494 msg.del_param('filename', 'content-disposition')
495 self.assertEqual(msg['content-disposition'], 'attachment')
498 msg = Message()
499 # Deleting param on empty msg should not raise exception.
500 msg.del_param('filename', 'content-disposition')
503 msg = Message()
504 msg.add_header('Content-Type', 'text/plain', charset='utf-8')
505 existing_header = msg['Content-Type']
506 msg.del_param('foobar', header='Content-Type')
507 self.assertEqual(msg['Content-Type'], existing_header)
511 msg = Message()
512 self.assertRaises(ValueError, msg.set_type, 'text')
513 msg.set_type('text/plain')
514 eq(msg['content-type'], 'text/plain')
515 msg.set_param('charset', 'us-ascii')
516 eq(msg['content-type'], 'text/plain; charset="us-ascii"')
517 msg.set_type('text/html')
518 eq(msg['content-type'], 'text/html; charset="us-ascii"')
521 msg = Message()
522 msg['X-Content-Type'] = 'text/plain'
523 msg.set_type('application/octet-stream', 'X-Content-Type')
524 self.assertEqual(msg['x-content-type'], 'application/octet-stream')
527 msg = Message()
528 self.assertEqual(msg.get_content_type(), 'text/plain')
531 msg = Message()
532 msg.set_default_type('message/rfc822')
533 self.assertEqual(msg.get_content_type(), 'message/rfc822')
536 msg = self._msgobj('msg_30.txt')
537 self.assertEqual(msg.get_payload(0).get_content_type(),
541 msg = self._msgobj('msg_28.txt')
542 self.assertEqual(msg.get_payload(0).get_content_type(),
546 msg = self._msgobj('msg_03.txt')
547 self.assertEqual(msg.get_content_type(), 'text/plain')
550 msg = self._msgobj('msg_01.txt')
551 self.assertEqual(msg.get_content_type(), 'text/plain')
554 msg = Message()
555 self.assertEqual(msg.get_content_maintype(), 'text')
558 msg = Message()
559 msg.set_default_type('message/rfc822')
560 self.assertEqual(msg.get_content_maintype(), 'message')
563 msg = self._msgobj('msg_30.txt')
564 self.assertEqual(msg.get_payload(0).get_content_maintype(), 'message')
567 msg = self._msgobj('msg_28.txt')
568 self.assertEqual(msg.get_payload(0).get_content_maintype(), 'message')
571 msg = self._msgobj('msg_03.txt')
572 self.assertEqual(msg.get_content_maintype(), 'text')
575 msg = self._msgobj('msg_01.txt')
576 self.assertEqual(msg.get_content_maintype(), 'text')
579 msg = Message()
580 self.assertEqual(msg.get_content_subtype(), 'plain')
583 msg = Message()
584 msg.set_default_type('message/rfc822')
585 self.assertEqual(msg.get_content_subtype(), 'rfc822')
588 msg = self._msgobj('msg_30.txt')
589 self.assertEqual(msg.get_payload(0).get_content_subtype(), 'rfc822')
592 msg = self._msgobj('msg_28.txt')
593 self.assertEqual(msg.get_payload(0).get_content_subtype(), 'rfc822')
596 msg = self._msgobj('msg_03.txt')
597 self.assertEqual(msg.get_content_subtype(), 'plain')
600 msg = self._msgobj('msg_01.txt')
601 self.assertEqual(msg.get_content_subtype(), 'plain')
604 msg = Message()
605 msg['Content-Type'] = 'no-slash-in-this-string'
606 self.assertEqual(msg.get_content_maintype(), 'text')
609 msg = Message()
610 msg['Content-Type'] = 'no-slash-in-this-string'
611 self.assertEqual(msg.get_content_subtype(), 'plain')
615 msg = Message()
616 msg.add_header('First', 'One')
617 msg.add_header('Second', 'Two')
618 msg.add_header('Third', 'Three')
619 eq(msg.keys(), ['First', 'Second', 'Third'])
620 eq(msg.values(), ['One', 'Two', 'Three'])
621 msg.replace_header('Second', 'Twenty')
622 eq(msg.keys(), ['First', 'Second', 'Third'])
623 eq(msg.values(), ['One', 'Twenty', 'Three'])
624 msg.add_header('First', 'Eleven')
625 msg.replace_header('First', 'One Hundred')
626 eq(msg.keys(), ['First', 'Second', 'Third', 'First'])
627 eq(msg.values(), ['One Hundred', 'Twenty', 'Three', 'Eleven'])
628 self.assertRaises(KeyError, msg.replace_header, 'Fourth', 'Missing')
631 msg = Message()
632 self.assertIsNone(msg.get_content_disposition())
633 msg.add_header('Content-Disposition', 'attachment',
635 self.assertEqual(msg.get_content_disposition(), 'attachment')
636 msg.replace_header('Content-Disposition', 'inline')
637 self.assertEqual(msg.get_content_disposition(), 'inline')
638 msg.replace_header('Content-Disposition', 'InlinE')
639 self.assertEqual(msg.get_content_disposition(), 'inline')
644 msg = Message()
645 msg['content-type'] = 'audio/x-midi'
646 msg['content-transfer-encoding'] = 'base64'
647 msg.set_payload(x)
648 self.assertEqual(msg.get_payload(decode=True),
651 self.assertIsInstance(msg.defects[0],
658 msg = Message()
659 msg['content-type'] = 'text/plain'
660 msg['content-transfer-encoding'] = '8bit'
661 msg.set_payload(x)
662 self.assertEqual(msg.get_payload(decode=True),
669 msg = Message()
670 msg['content-type'] = 'text/plain; charset="utf-8"'
671 msg['content-transfer-encoding'] = '8bit'
672 msg._payload = x
673 self.assertEqual(msg.get_payload(decode=True), x)
677 msg = Message()
678 msg.add_header('Content-Disposition', 'attachment',
681 msg['Content-Disposition'])
684 msg = Message()
685 msg.add_header('Content-Disposition', 'attachment',
689 msg['Content-Disposition'])
692 msg = Message()
693 msg.add_header('Content-Disposition', 'attachment',
697 msg['Content-Disposition'])
700 msg = Message()
701 msg.add_header('Content-Disposition', 'attachment',
705 msg['Content-Disposition'])
708 msg = Message()
709 msg.add_header('Content-Disposition', 'attachment',
713 msg['Content-Disposition'])
717 msg = Message()
718 msg['content-type'] = 'text/plain; charset=%s' % charset
719 msg['content-transfer-encoding'] = 'quoted-printable'
720 msg.set_payload(b'foo=e6=96=87bar')
722 msg.get_payload(decode=True),
728 msg = Message()
729 msg['content-type'] = 'text/plain; charset=%s' % charset
730 msg['content-transfer-encoding'] = 'base64'
731 msg.set_payload(b'Zm9v5paHYmFy')
733 msg.get_payload(decode=True),
740 msg = Message()
741 msg['content-type'] = 'text/plain; charset=%s' % charset
742 msg['content-transfer-encoding'] = encoding
743 msg.set_payload(b"begin 666 -\n)9F]OYI:'8F%R\n \nend\n")
745 msg.get_payload(decode=True),
752 msg = Message()
753 msg.add_header('Content-Disposition', 'inline', foo_bar=None)
754 self.assertEqual("inline; foo-bar", msg['Content-Disposition'])
757 msg = Message()
758 msg.add_header('X-Status', None)
759 self.assertEqual('', msg['X-Status'])
764 msg = Message()
765 msg['Dummy'] = Header('dummy\nX-Injected-Header: test')
766 self.assertRaises(errors.HeaderParseError, msg.as_string)
769 msg = Message()
770 msg['Dummy'] = 'dummy\nX-Injected-Header: test'
771 self.assertRaises(errors.HeaderParseError, msg.as_string)
812 msg = Message()
813 msg.set_charset('us-ascii')
814 eq(msg['content-transfer-encoding'], '7bit')
819 msg = MIMEText('hello world')
820 eq(msg['content-transfer-encoding'], '7bit')
822 msg = MIMEText('hello \xf8 world')
823 eq(msg['content-transfer-encoding'], 'base64')
825 msg = MIMEText('hello \xf8 world', _charset='iso-8859-1')
826 eq(msg['content-transfer-encoding'], 'quoted-printable')
833 msg = MIMEText('文\n', _charset='euc-jp')
834 eq(msg['content-transfer-encoding'], '7bit')
835 eq(msg.as_string(), textwrap.dedent("""\
844 msg = MIMEText('\xe1\xf6\n', 'text', 'ISO-8859-1')
845 self.assertEqual(str(msg), textwrap.dedent("""\
855 msg = MIMEText('\u017c\n', 'text', 'ISO-8859-2')
856 self.assertEqual(str(msg), textwrap.dedent("""\
872 msg = email.message_from_string("""\
881 g.flatten(msg)
929 msg = Message()
930 msg['Subject'] = h
933 g.flatten(msg)
1006 msg = MIMEText('')
1009 msg['X-Foobar-Spoink-Defrobnit'] = (
1014 g.flatten(msg)
1026 msg = Message()
1027 msg['From'] = 'test@dom.ain'
1028 msg['References'] = SPACE.join('<%d@dom.ain>' % i for i in range(10))
1029 msg.set_payload('Test')
1032 g.flatten(msg)
1140 msg = Message()
1141 msg['From'] = 'test@dom.ain'
1142 msg['References'] = SPACE.join(['<foo@dom.ain> '] * 10)
1143 msg.set_payload('Test')
1146 g.flatten(msg)
1157 msg = Message()
1158 msg['From'] = 'test@dom.ain'
1159 msg['References'] = SPACE.join(['<foo@dom.ain>'] * 10) + '; abc'
1160 msg.set_payload('Test')
1163 g.flatten(msg)
1174 msg = Message()
1175 msg['From'] = 'test@dom.ain'
1176 msg['References'] = ('thisverylongheaderhas;semicolons;and,commas,but'
1178 msg.set_payload('Test')
1181 g.flatten(msg)
1242 msg = Message()
1249 msg['Subject'] = h
1250 eq(msg.as_string(maxheaderlen=76), """\
1255 eq(msg.as_string(maxheaderlen=0), """\
1262 msg = Message()
1266 msg['Reply-To'] = header_string
1267 eq(msg.as_string(maxheaderlen=78), """\
1272 msg = Message()
1273 msg['Reply-To'] = Header(header_string,
1275 eq(msg.as_string(maxheaderlen=78), """\
1288 msg = Message()
1289 msg['To'] = to
1290 eq(msg.as_string(maxheaderlen=78), '''\
1334 msg = Message()
1335 msg['Received-1'] = Header(h, continuation_ws='\t')
1336 msg['Received-2'] = h
1338 self.ndiffAssertEqual(msg.as_string(maxheaderlen=78), """\
1352 msg = Message()
1353 msg['Received-1'] = Header(h, header_name='Received-1',
1355 msg['Received-2'] = h
1357 self.ndiffAssertEqual(msg.as_string(maxheaderlen=78), """\
1369 msg = Message()
1373 msg['Face-1'] = t
1374 msg['Face-2'] = Header(t, header_name='Face-2')
1375 msg['Face-3'] = ' ' + t
1378 eq(msg.as_string(maxheaderlen=78), """\
1397 msg = email.message_from_string(m)
1398 eq(msg.as_string(maxheaderlen=78), '''\
1410 msg = Message()
1411 msg['List'] = h
1412 msg['List'] = Header(h, header_name='List')
1413 eq(msg.as_string(maxheaderlen=78), """\
1441 self.msg = Message()
1442 self.msg['From'] = 'aaa@bbb.org'
1443 self.msg.set_payload("""\
1451 g.flatten(self.msg)
1462 g.flatten(self.msg)
1473 msg = email.message_from_string(textwrap.dedent("""\
1489 g.flatten(msg)
1501 msg = email.message_from_bytes(source + b'From R\xc3\xb6lli\n')
1504 g.flatten(msg)
1514 msg = email.message_from_bytes(source)
1632 msg = MIMEApplication(b'\xfa\xfb\xfc\xfd\xfe\xff')
1633 eq(msg.get_content_type(), 'application/octet-stream')
1634 eq(msg['content-transfer-encoding'], 'base64')
1639 msg = MIMEApplication(bytesdata)
1641 eq(msg.get_payload().strip(), '+vv8/f7/')
1642 eq(msg.get_payload(decode=True), bytesdata)
1647 msg = MIMEApplication(bytesdata, _encoder=encoders.encode_7or8bit)
1649 self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata))
1650 self.assertEqual(msg.get_payload(decode=True), bytesdata)
1651 self.assertEqual(msg['Content-Transfer-Encoding'], '8bit')
1654 g.flatten(msg)
1657 self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata))
1666 msg = MIMEApplication(bytesdata, _encoder=encoders.encode_noop)
1668 self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata))
1669 self.assertEqual(msg.get_payload(decode=True), bytesdata)
1672 g.flatten(msg)
1675 self.assertEqual(msg.get_payload(), '\uFFFD' * len(bytesdata))
1681 msg = MIMEApplication(bytesdata, _encoder=encoders.encode_noop)
1682 self.assertEqual(msg.get_payload(decode=True), bytesdata)
1685 g.flatten(msg)
1693 msg = MIMEApplication(bytesdata, _encoder=encoders.encode_quopri)
1694 self.assertEqual(msg.get_payload(), '=FA=FB=FC=FD=FE=FF=20')
1695 self.assertEqual(msg.get_payload(decode=True), bytesdata)
1696 self.assertEqual(msg['Content-Transfer-Encoding'], 'quoted-printable')
1699 g.flatten(msg)
1702 self.assertEqual(msg.get_payload(), '=FA=FB=FC=FD=FE=FF=20')
1708 msg = MIMEApplication(bytesdata, _encoder=encoders.encode_base64)
1709 self.assertEqual(msg.get_payload(), '+vv8/f7/\n')
1710 self.assertEqual(msg.get_payload(decode=True), bytesdata)
1713 g.flatten(msg)
1716 self.assertEqual(msg.get_payload(), '+vv8/f7/\n')
1740 msg = MIMEText('hello there', _charset='us-ascii')
1741 eq(msg.get_charset().input_charset, 'us-ascii')
1742 eq(msg['content-type'], 'text/plain; charset="us-ascii"')
1746 msg = MIMEText('hello there', _charset=charset)
1747 eq(msg.get_charset().input_charset, 'utf-8')
1748 eq(msg['content-type'], 'text/plain; charset="utf-8"')
1749 eq(msg.get_payload(), 'hello there')
1753 msg = MIMEText('hello there', _charset='us-ascii')
1754 eq(msg.get_charset().input_charset, 'us-ascii')
1755 eq(msg['content-type'], 'text/plain; charset="us-ascii"')
1759 msg = MIMEText('hello there')
1760 eq(msg.get_charset(), 'us-ascii')
1761 eq(msg['content-type'], 'text/plain; charset="us-ascii"')
1762 self.assertIn('hello there', msg.as_string())
1767 msg = MIMEText(teststr, _charset='utf-8')
1768 eq(msg.get_charset().output_charset, 'utf-8')
1769 eq(msg['content-type'], 'text/plain; charset="utf-8"')
1770 eq(msg.get_payload(decode=True), teststr.encode('utf-8'))
1850 msg = Parser().parsestr(text)
1851 self.ndiffAssertEqual(text, msg.as_string())
1899 msg = MIMEText('hello world')
1900 outer.attach(msg)
1924 msg = MIMEText('hello world')
1925 outer.attach(msg)
1952 msg = MIMEText('hello world')
1953 outer.attach(msg)
1979 msg = MIMEText('hello world')
1980 outer.attach(msg)
2006 msg = MIMEText('hello world')
2007 outer.attach(msg)
2033 msg = MIMEText('hello world')
2034 outer.attach(msg)
2055 msg = self._msgobj('msg_36.txt')
2056 eq(len(msg.get_payload()), 2)
2057 msg1 = msg.get_payload(1)
2070 msg = self._msgobj('msg_37.txt')
2071 self.assertEqual(len(msg.get_payload()), 3)
2079 msg = self._msgobj('msg_38.txt')
2081 iterators._structure(msg, sfp)
2094 # msg 39.txt is similarly evil in that it's got inner parts that use
2097 msg = self._msgobj('msg_39.txt')
2099 iterators._structure(msg, sfp)
2110 msg = self._msgobj('msg_40.txt')
2111 self.assertEqual(msg.as_string(), '''\
2126 msg = email.message_from_string('''\
2139 self.assertTrue(msg.is_multipart())
2140 eq(msg.get_boundary(), ' XXXX')
2141 eq(len(msg.get_payload()), 2)
2170 msg = self._msgobj('msg_14.txt')
2171 eq(msg.get_content_type(), 'text/plain')
2172 eq(msg.get_content_maintype(), 'text')
2173 eq(msg.get_content_subtype(), 'plain')
2177 msg = self._msgobj('msg_15.txt')
2179 inner = msg.get_payload(0)
2187 msg = self._msgobj('msg_25.txt')
2188 self.assertIsInstance(msg.get_payload(), str)
2189 self.assertEqual(len(msg.defects), 2)
2190 self.assertIsInstance(msg.defects[0],
2192 self.assertIsInstance(msg.defects[1],
2220 msg = self._str_msg(
2222 self.assertEqual(len(msg.defects), 1)
2223 self.assertIsInstance(msg.defects[0],
2228 msg = self._str_msg(self.multipart_msg.format(''))
2229 self.assertEqual(len(msg.defects), 0)
2234 msg = self._str_msg(
2237 self.assertEqual(len(msg.defects), 0)
2243 msg = Message()
2245 msg['Content-Type'] = 'text'
2246 eq(msg.get_content_maintype(), 'text')
2247 eq(msg.get_content_subtype(), 'plain')
2248 eq(msg.get_content_type(), 'text/plain')
2250 del msg['content-type']
2251 msg['Content-Type'] = 'foo'
2252 eq(msg.get_content_maintype(), 'text')
2253 eq(msg.get_content_subtype(), 'plain')
2254 eq(msg.get_content_type(), 'text/plain')
2258 g.flatten(msg)
2263 msg = self._msgobj('msg_31.txt')
2264 eq(msg.get_payload(), """\
2280 msg = self._msgobj('msg_35.txt')
2281 eq(msg.as_string(), """\
2291 msg = self._msgobj('msg_41.txt')
2292 self.assertTrue(hasattr(msg, 'defects'))
2293 self.assertEqual(len(msg.defects), 2)
2294 self.assertIsInstance(msg.defects[0],
2296 self.assertIsInstance(msg.defects[1],
2319 msg = email.message_from_string(m)
2320 eq(msg.keys(), ['Subject'])
2321 eq(msg.get_payload(), 'body')
2322 eq(len(msg.defects), 1)
2323 self.assertDefectsEqual(msg.defects,
2325 eq(msg.defects[0].line, ' Line 1\n')
2333 msg = self._str_msg('Subject: test\nnot a header\nTo: abc\n\nb\n')
2334 self.assertEqual(msg.keys(), ['Subject'])
2335 self.assertEqual(msg.get_payload(), 'not a header\nTo: abc\n\nb\n')
2336 self.assertDefectsEqual(msg.defects,
2522 msg = self._msgobj('msg_11.txt')
2523 eq(msg.get_content_type(), 'message/rfc822')
2524 payload = msg.get_payload()
2534 # msg 16 is a Delivery Status Notification, see RFC 1894
2535 msg = self._msgobj('msg_16.txt')
2536 eq(msg.get_content_type(), 'multipart/report')
2537 self.assertTrue(msg.is_multipart())
2538 eq(len(msg.get_payload()), 3)
2540 subpart = msg.get_payload(0)
2560 subpart = msg.get_payload(1)
2578 subpart = msg.get_payload(2)
2593 msg = Message()
2594 msg['From'] = 'aperson@dom.ain'
2595 msg['To'] = 'bperson@dom.ain'
2596 msg['Subject'] = 'Test'
2597 msg.preamble = 'MIME message'
2598 msg.epilogue = 'End of MIME message\n'
2601 msg.add_header('Content-Type', 'multipart/mixed', boundary='BOUNDARY')
2602 msg.attach(msg1)
2603 msg.attach(msg2)
2606 g.flatten(msg)
2611 msg = Message()
2612 msg['From'] = 'aperson@dom.ain'
2613 msg['To'] = 'bperson@dom.ain'
2614 msg['Subject'] = 'Test'
2615 msg.preamble = 'MIME message'
2616 msg.epilogue = ''
2619 msg.add_header('Content-Type', 'multipart/mixed', boundary='BOUNDARY')
2620 msg.attach(msg1)
2621 msg.attach(msg2)
2622 eq(msg.as_string(), """\
2647 msg = email.message_from_file(fp)
2648 container1 = msg.get_payload(0)
2651 container2 = msg.get_payload(1)
2664 msg = email.message_from_file(fp)
2665 container1 = msg.get_payload(0)
2668 container2 = msg.get_payload(1)
2756 msg = MIMEMultipart(_subparts=(text1, text2))
2757 eq(len(msg.get_payload()), 2)
2758 eq(msg.get_payload(0), text1)
2759 eq(msg.get_payload(1), text2)
2762 msg = MIMEMultipart()
2763 self.assertTrue(msg.is_multipart())
2766 msg = MIMEMultipart()
2767 msg['To'] = 'a@b.com'
2768 msg['To'] = 'c@d.com'
2769 self.assertEqual(msg.get_all('to'), ['a@b.com', 'c@d.com'])
2772 msg = MIMEMultipart(policy=email.policy.default)
2773 msg['To'] = 'a@b.com'
2775 msg['To'] = 'c@d.com'
2783 msg = MIMENonMultipart('text', 'plain')
2784 self.assertFalse(msg.is_multipart())
2787 msg = Message()
2788 msg['Subject'] = 'subpart 1'
2790 self.assertRaises(errors.MultipartConversionError, r.attach, msg)
2805 msg = email.message_from_string(data)
2806 return msg, data
2808 def _idempotent(self, msg, text, unixfrom=False):
2812 g.flatten(msg, unixfrom=unixfrom)
2817 msg, text = self._msgobj('msg_01.txt')
2818 eq(msg.get_content_type(), 'text/plain')
2819 eq(msg.get_content_maintype(), 'text')
2820 eq(msg.get_content_subtype(), 'plain')
2821 eq(msg.get_params()[1], ('charset', 'us-ascii'))
2822 eq(msg.get_param('charset'), 'us-ascii')
2823 eq(msg.preamble, None)
2824 eq(msg.epilogue, None)
2825 self._idempotent(msg, text)
2829 msg, text = self._msgobj('msg_03.txt')
2830 eq(msg.get_content_type(), 'text/plain')
2831 eq(msg.get_params(), None)
2832 eq(msg.get_param('charset'), None)
2833 self._idempotent(msg, text)
2836 msg, text = self._msgobj('msg_04.txt')
2837 self._idempotent(msg, text)
2840 msg, text = self._msgobj('msg_02.txt')
2841 self._idempotent(msg, text)
2844 msg, text = self._msgobj('msg_27.txt')
2845 self._idempotent(msg, text)
2848 msg, text = self._msgobj('msg_28.txt')
2849 self._idempotent(msg, text)
2852 msg, text = self._msgobj('msg_06.txt')
2853 self._idempotent(msg, text)
2856 msg, text = self._msgobj('msg_05.txt')
2857 self._idempotent(msg, text)
2860 msg, text = self._msgobj('msg_16.txt')
2861 self._idempotent(msg, text)
2864 msg, text = self._msgobj('msg_21.txt')
2865 self._idempotent(msg, text)
2868 msg, text = self._msgobj('msg_23.txt')
2869 self._idempotent(msg, text)
2872 msg, text = self._msgobj('msg_24.txt')
2873 self._idempotent(msg, text)
2876 msg, text = self._msgobj('msg_31.txt')
2877 self._idempotent(msg, text)
2880 msg, text = self._msgobj('msg_32.txt')
2881 self._idempotent(msg, text)
2884 msg, text = self._msgobj('msg_33.txt')
2885 self._idempotent(msg, text)
2888 msg, text = self._msgobj('msg_34.txt')
2889 self._idempotent(msg, text)
2892 msg, text = self._msgobj('msg_12a.txt')
2893 self._idempotent(msg, text)
2896 msg, text = self._msgobj('msg_36.txt')
2897 self._idempotent(msg, text)
2900 msg, text = self._msgobj('msg_43.txt')
2901 self._idempotent(msg, text, unixfrom=True)
2904 msg, text = self._msgobj('msg_45.txt')
2905 self._idempotent(msg, text)
2910 msg, text = self._msgobj('msg_05.txt')
2911 eq(msg.get_content_type(), 'multipart/report')
2914 for pk, pv in msg.get_params():
2918 eq(msg.preamble, 'This is a MIME-encapsulated message.' + self.linesep)
2919 eq(msg.epilogue, self.linesep)
2920 eq(len(msg.get_payload()), 3)
2922 msg1 = msg.get_payload(0)
2925 msg2 = msg.get_payload(1)
2928 msg3 = msg.get_payload(2)
2940 msg, text = self._msgobj('msg_06.txt')
2942 eq(msg.get_content_type(), 'message/rfc822')
2945 payload = msg.get_payload()
2961 msg = email.message_from_string(text)
2966 g.flatten(msg)
2973 msg = email.message_from_file(fp)
2978 g.flatten(msg)
2989 msg = email.message_from_string(text, MyMessage)
2990 self.assertIsInstance(msg, MyMessage)
2994 msg = email.message_from_string(text, MyMessage)
2995 for subpart in msg.walk():
3004 msg = email.message_from_file(fp, MyMessage)
3005 self.assertIsInstance(msg, MyMessage)
3008 msg = email.message_from_file(fp, MyMessage)
3009 for subpart in msg.walk():
3016 msg = self._str_msg("Subject: test\n\ntest", MyMessage)
3017 self.assertIsInstance(msg, MyMessage)
3366 msg = Message()
3367 msg.add_header('content-disposition', 'attachment',
3369 eq(msg.get_filename(), 'foo\\wacky"name')
3377 msg = Message()
3378 msg['Content-Type'] = 'text/plain; charset=UTF-8'
3379 eq(msg['content-type'], 'text/plain; charset=UTF-8')
3380 charsets = msg.get_charsets()
3385 msg.set_payload(b'hello world', charset=charset)
3386 eq(msg.get_payload(), 'aGVsbG8gd29ybGQ=\n')
3387 eq(msg.get_payload(decode=True), b'hello world')
3388 eq(msg['content-transfer-encoding'], 'base64')
3390 msg = Message()
3391 msg['Content-Type'] = 'text/plain; charset="US-ASCII"'
3392 charsets = msg.get_charsets()
3397 msg.set_payload('hello world', charset=charset)
3398 eq(msg.get_payload(), 'hello world')
3399 eq(msg['content-transfer-encoding'], '7bit')
3412 msg = self._msgobj('msg_43.txt')
3414 iterators._structure(msg, sfp)
3471 msg = email.message_from_string(msgtxt)
3474 g.flatten(msg)
3482 msg = email.message_from_string(msgtxt_nl)
3485 g.flatten(msg, linesep='\r\n')
3494 msg = email.message_from_bytes(msgtxt_nl)
3497 g.flatten(msg, linesep='\r\n')
3528 msg = self._msgobj('msg_01.txt')
3529 it = iterators.body_line_iterator(msg)
3532 neq(EMPTYSTRING.join(lines), msg.get_payload())
3534 msg = self._msgobj('msg_02.txt')
3535 it = iterators.body_line_iterator(msg)
3543 msg = self._msgobj('msg_04.txt')
3544 it = iterators.typed_subpart_iterator(msg, 'text')
3560 msg = self._msgobj('msg_03.txt')
3561 it = iterators.typed_subpart_iterator(msg, 'text', 'plain')
3636 msg = self.parse("First: val\n: bad\nSecond: val")
3637 self.assertEqual(msg['First'], 'val')
3638 self.assertEqual(msg['Second'], 'val')
3680 msg = HeaderParser().parse(fp)
3681 eq(msg['from'], 'ppp-request@zzz.org')
3682 eq(msg['to'], 'ppp@zzz.org')
3683 eq(msg.get_content_type(), 'multipart/mixed')
3684 self.assertFalse(msg.is_multipart())
3685 self.assertIsInstance(msg.get_payload(), str)
3691 msg = email.parser.BytesHeaderParser().parse(fp)
3692 eq(msg['from'], 'ppp-request@zzz.org')
3693 eq(msg['to'], 'ppp@zzz.org')
3694 eq(msg.get_content_type(), 'multipart/mixed')
3695 self.assertFalse(msg.is_multipart())
3696 self.assertIsInstance(msg.get_payload(), str)
3697 self.assertIsInstance(msg.get_payload(decode=True), bytes)
3728 msg = email.message_from_string("""\
3738 eq(msg['subject'], 'the next line has a space on it\n ')
3739 eq(msg['message-id'], 'spam')
3740 eq(msg.get_payload(), "Here's the message body\n")
3746 msg = email.message_from_string("""\
3756 eq(msg['subject'], 'the next line has a space on it\n ')
3757 eq(msg['message-id'], 'spam')
3758 eq(msg.get_payload(), "Here's the message body\n")
3763 msg = Parser().parse(fp)
3764 eq(len(msg.get_payload()), 2)
3765 part1 = msg.get_payload(0)
3768 part2 = msg.get_payload(1)
3775 msg = email.message_from_string(text)
3778 g.flatten(msg, linesep='\r\n')
3787 msg = email.message_from_file(fp)
3794 eq(msg.is_multipart(), 1)
3795 eq(len(msg.get_payload()), 2)
3796 part1 = msg.get_payload(0)
3805 part2 = msg.get_payload(1)
3819 msg = email.message_from_string(NL.join(lines))
3820 self.assertEqual(msg['date'], 'Tue, 20 Aug 2002 16:43:45 +1000')
3829 msg = email.message_from_string(m)
3830 eq(msg.get('Header'), value1)
3831 eq(msg.get('Next-Header'), value2)
3836 msg = email.message_from_string(m)
3837 eq(len(msg), 3)
3838 eq(sorted(field for field in msg), ['!"#QUX;~', '>From', 'From'])
3839 eq(msg.get_payload(), 'body')
3844 msg = email.message_from_string(m)
3845 eq(len(msg.keys()), 0)
3850 msg = email.message_from_string(m)
3851 headers = msg.keys()
3854 eq(msg.get_payload(), 'body')
3872 msg = email.message_from_string(m)
3873 self.assertTrue(msg.get_payload(0).get_payload().endswith('\r\n'))
3899 msg = email.message_from_bytes(m)
3900 self.assertEqual(msg.get_payload(), "pöstal\n")
3901 self.assertEqual(msg.get_payload(decode=True),
3908 msg = email.message_from_bytes(m)
3909 self.assertEqual(msg.get_payload(), "p\uFFFD\uFFFDstal\n")
3910 self.assertEqual(msg.get_payload(decode=True),
3926 msg = email.message_from_bytes(m)
3927 self.assertEqual(msg.get_payload(), 'p=C3=B6stál\n')
3928 self.assertEqual(msg.get_payload(decode=True),
3941 msg = email.message_from_bytes(m)
3942 self.assertEqual(msg.get_payload(), 'p=C3=B6st\uFFFD\uFFFDl\n')
3943 self.assertEqual(msg.get_payload(decode=True),
3954 msg = email.message_from_bytes(m)
3955 self.assertEqual(msg.get_payload(decode=True),
3957 self.assertIsInstance(msg.defects[0],
3966 msg = email.message_from_bytes(m)
3967 self.assertEqual(msg.get_payload(decode=True),
3985 msg = email.message_from_bytes(self.headertest_msg)
3986 self.assertEqual(str(msg.get('to')), 'b\uFFFD\uFFFDz')
3987 self.assertEqual(str(msg['to']), 'b\uFFFD\uFFFDz')
3990 msg = email.message_from_bytes(self.headertest_msg)
3991 self.assertEqual(str(msg),
4003 msg = email.message_from_bytes(self.headertest_msg)
4004 self.assertListEqual([str(x) for x in msg.values()],
4014 msg = email.message_from_bytes(self.headertest_msg)
4015 self.assertListEqual([(str(x), str(y)) for (x, y) in msg.items()],
4026 msg = email.message_from_bytes(self.headertest_msg)
4027 self.assertListEqual([str(x) for x in msg.get_all('from')],
4032 msg = email.message_from_bytes(textwrap.dedent("""\
4035 self.assertEqual(msg.get_content_type(), "text/pl\uFFFDin")
4036 self.assertEqual(msg.get_content_maintype(), "text")
4037 self.assertEqual(msg.get_content_subtype(), "pl\uFFFDin")
4041 msg = email.message_from_bytes(
4043 self.assertEqual(msg.get_params(header='x-header'),
4045 self.assertEqual(msg.get_param('Foo', header='x-header'), '\uFFFdne')
4047 self.assertEqual(msg.get_param('b\xa7r', header='x-header'), None)
4051 msg = email.message_from_bytes(textwrap.dedent("""\
4055 self.assertEqual(msg.get_param('title'),
4059 msg = email.message_from_bytes(textwrap.dedent("""\
4063 msg.set_param('title', 'test')
4064 self.assertEqual(msg.get_param('title'), 'test')
4067 msg = email.message_from_bytes(textwrap.dedent("""\
4071 msg.del_param('title')
4072 self.assertEqual(msg.get_param('title'), None)
4073 self.assertEqual(msg.get_content_maintype(), 'text')
4076 msg = email.message_from_bytes(textwrap.dedent("""\
4082 self.assertEqual(msg.get_payload(), 'payload\n')
4083 self.assertEqual(msg.get_payload(decode=True), b'payload\n')
4098 msg = email.message_from_bytes(self.non_latin_bin_msg)
4100 email.generator.BytesGenerator(out).flatten(msg)
4105 msg = email.message.Message()
4107 email.generator.BytesGenerator(out).flatten(msg)
4124 msg = email.message_from_bytes(self.non_latin_bin_msg)
4126 email.generator.Generator(out).flatten(msg)
4130 msg = email.message_from_bytes(self.non_latin_bin_msg)
4132 BytesGenerator(out).flatten(msg)
4134 Generator(StringIO()).flatten(msg) # Should not mutate msg!
4136 BytesGenerator(out).flatten(msg)
4143 msg = email.message_from_bytes(self.non_latin_bin_msg)
4145 email.generator.BytesGenerator(out).flatten(msg, unixfrom=True)
4157 fn = 'test.msg'
4211 msg = email.message_from_bytes(text)
4214 g.flatten(msg, linesep='\r\n')
4257 msg = email.message_from_bytes(source)
4260 g.flatten(msg)
4298 msg = email.message_from_bytes(data)
4299 return msg, data
4301 def _idempotent(self, msg, data, unixfrom=False):
4304 g.flatten(msg, unixfrom=unixfrom, linesep=self.linesep)
5098 msg = email.message_from_string("EmptyHeader:")
5099 self.assertEqual(str(msg), "EmptyHeader: \n\n")
5102 msg = Message()
5103 msg['SomeHeader'] = ' value with leading ws'
5104 self.assertEqual(str(msg), "SomeHeader: value with leading ws\n\n")
5118 msg = self._msgobj('msg_29.txt')
5119 eq(msg.get_param('title'),
5121 eq(msg.get_param('title', unquote=False),
5126 msg = Message()
5127 msg.set_param('title', 'This is even more ***fun*** isn\'t it!',
5129 eq(msg.get_param('title'),
5131 msg.set_param('title', 'This is even more ***fun*** isn\'t it!',
5133 eq(msg.get_param('title'),
5135 msg = self._msgobj('msg_01.txt')
5136 msg.set_param('title', 'This is even more ***fun*** isn\'t it!',
5138 eq(msg.as_string(maxheaderlen=78), """\
5162 msg = Message()
5163 msg.set_param('title', 'foo')
5164 self.assertEqual(msg['content-type'], 'text/plain; title="foo"')
5165 msg.set_param('title', 'bar', requote=False)
5166 self.assertEqual(msg['content-type'], 'text/plain; title=bar')
5168 msg.set_param('title', "(bar)bell", requote=False)
5169 self.assertEqual(msg['content-type'], 'text/plain; title="(bar)bell"')
5173 msg = self._msgobj('msg_01.txt')
5174 msg.set_param('foo', 'bar', charset='us-ascii', language='en')
5175 msg.set_param('title', 'This is even more ***fun*** isn\'t it!',
5177 msg.del_param('foo', header='Content-Type')
5178 eq(msg.as_string(maxheaderlen=78), """\
5206 msg = self._msgobj('msg_32.txt')
5207 eq(msg.get_content_charset(), 'us-ascii')
5218 msg = email.message_from_string(m)
5219 self.assertEqual(msg.get_filename(),
5221 self.assertEqual(m, msg.as_string())
5232 msg = email.message_from_string(m)
5233 self.assertEqual(msg.get_filename(),
5235 self.assertEqual(m, msg.as_string())
5247 msg = email.message_from_string(m)
5248 param = msg.get_param('NAME')
5263 msg = email.message_from_string(m)
5264 self.assertEqual(msg.get_filename(),
5276 msg = email.message_from_string(m)
5277 self.assertEqual(msg.get_filename(),
5290 msg = email.message_from_string(m)
5292 msg.get_filename(),
5303 msg = email.message_from_string(m)
5305 msg.get_filename(),
5316 msg = email.message_from_string(m)
5317 self.assertEqual(msg.get_boundary(),
5329 msg = email.message_from_string(m)
5330 self.assertEqual(msg.get_content_charset(),
5342 msg = email.message_from_string(m)
5343 self.assertEqual(msg.get_filename(),
5351 msg = email.message_from_string(m)
5354 self.assertEqual(msg.get_content_charset(), None)
5361 msg = email.message_from_string(m)
5364 self.assertEqual(msg.get_content_charset(), None)
5374 msg = email.message_from_string(m)
5375 self.assertEqual(msg.get_filename(),
5384 msg = email.message_from_string(m)
5385 self.assertEqual(msg.get_filename(), 'myfile.txt')
5393 msg = email.message_from_string(m)
5394 self.assertEqual(msg.get_filename(), 'myfile.txt')
5403 msg = email.message_from_string(m)
5404 charset, language, s = msg.get_param('name')
5415 msg = email.message_from_string(m)
5416 param = msg.get_param('name')
5425 msg = email.message_from_string(m)
5427 msg.get_filename(),
5435 msg = email.message_from_string(m)
5437 msg.get_filename(),
5448 msg = email.message_from_string(m)
5449 charset, language, s = msg.get_param('name')
5461 msg = email.message_from_string(m)
5462 param = msg.get_param('name')
5473 msg = email.message_from_string(m)
5474 eq(msg.get_param('name'), "Frank's Document")
5486 msg = email.message_from_string(m)
5487 charset, language, s = msg.get_param('name')
5503 msg = email.message_from_string(m)
5504 charset, language, s = msg.get_param('name')
5529 msg = email.message_from_string(m)
5540 msg = email.message_from_string(original)
5541 return original, msg
5552 original, msg = self._msg_and_obj('msg_45.txt')
5553 result = msg.as_string()
5557 original, msg = self._msg_and_obj('msg_45.txt')
5558 result = msg.as_string(maxheaderlen=60)
5562 original, msg = self._msg_and_obj('msg_45.txt')
5564 Generator(fp).flatten(msg)