10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Copyright (C) 2001-2006 Python Software Foundation 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Author: Barry Warsaw 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Contact: email-sig@python.org 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi"""A package for parsing, handling, and generating email messages.""" 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi__version__ = '4.0.3' 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi__all__ = [ 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Old names 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'base64MIME', 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Charset', 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Encoders', 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Errors', 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Generator', 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Header', 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Iterators', 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Message', 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMEAudio', 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMEBase', 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMEImage', 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMEMessage', 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMEMultipart', 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMENonMultipart', 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'MIMEText', 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Parser', 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'quopriMIME', 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Utils', 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'message_from_string', 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'message_from_file', 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # new names 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'base64mime', 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'charset', 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'encoders', 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'errors', 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'generator', 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'header', 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'iterators', 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'message', 400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'mime', 410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'parser', 420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'quoprimime', 430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'utils', 440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Some convenience routines. Don't import Parser and Message as side-effects 490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# of importing email since those cascadingly import most of the rest of the 500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# email package. 510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef message_from_string(s, *args, **kws): 520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Parse a string into a Message object model. 530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Optional _class and strict are passed to the Parser constructor. 550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """ 560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from email.parser import Parser 570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return Parser(*args, **kws).parsestr(s) 580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef message_from_file(fp, *args, **kws): 610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """Read a file and parse its contents into a Message object model. 620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Optional _class and strict are passed to the Parser constructor. 640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """ 650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from email.parser import Parser 660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return Parser(*args, **kws).parse(fp) 670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Lazy loading to provide name mapping from new-style names (PEP 8 compatible 710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# email 4.0 module names), to old-style names (email 3.0 module names). 720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport sys 730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass LazyImporter(object): 750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, module_name): 760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.__name__ = 'email.' + module_name 770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getattr__(self, name): 790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __import__(self.__name__) 800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi mod = sys.modules[self.__name__] 810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.__dict__.update(mod.__dict__) 820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return getattr(mod, name) 830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi_LOWERNAMES = [ 860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # email.<old name> -> email.<new name is lowercased old name> 870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Charset', 880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Encoders', 890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Errors', 900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'FeedParser', 910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Generator', 920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Header', 930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Iterators', 940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Message', 950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Parser', 960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Utils', 970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'base64MIME', 980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'quopriMIME', 990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi_MIMENAMES = [ 1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # email.MIME<old name> -> email.mime.<new name is lowercased old name> 1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Audio', 1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Base', 1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Image', 1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Message', 1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Multipart', 1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'NonMultipart', 1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 'Text', 1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ] 1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifor _name in _LOWERNAMES: 1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi importer = LazyImporter(_name.lower()) 1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.modules['email.' + _name] = importer 1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(sys.modules['email'], _name, importer) 1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport email.mime 1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifor _name in _MIMENAMES: 1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi importer = LazyImporter('mime.' + _name.lower()) 1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi sys.modules['email.MIME' + _name] = importer 1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(sys.modules['email'], 'MIME' + _name, importer) 1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi setattr(sys.modules['email.mime'], _name, importer) 124