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