diff options
author | Fred Drake <fdrake@acm.org> | 2002-10-01 14:17:10 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2002-10-01 14:17:10 (GMT) |
commit | fcc31b44d24e8e8bddc19b27c916a051223e5164 (patch) | |
tree | 2ceccfbe3d8dc6f73f94cb919d7c6c8fd1398c45 /Doc/lib/email-dir.py | |
parent | ea66abc6e2b5d9e88f7c91aee5cea6d331b0a288 (diff) | |
download | cpython-fcc31b44d24e8e8bddc19b27c916a051223e5164.zip cpython-fcc31b44d24e8e8bddc19b27c916a051223e5164.tar.gz cpython-fcc31b44d24e8e8bddc19b27c916a051223e5164.tar.bz2 |
Split the long email package examples into separate files and use
\verbatiminput instead of the verbatim environment -- this does the "right
thing" regarding page breaks in long examples for the typeset formats, and
has nice benefits for the HTML version as well.
Diffstat (limited to 'Doc/lib/email-dir.py')
-rw-r--r-- | Doc/lib/email-dir.py | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/Doc/lib/email-dir.py b/Doc/lib/email-dir.py new file mode 100644 index 0000000..aa3b5e5 --- /dev/null +++ b/Doc/lib/email-dir.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python + +"""Send the contents of a directory as a MIME message. + +Usage: dirmail [options] from to [to ...]* + +Options: + -h / --help + Print this message and exit. + + -d directory + --directory=directory + Mail the contents of the specified directory, otherwise use the + current directory. Only the regular files in the directory are sent, + and we don't recurse to subdirectories. + +`from' is the email address of the sender of the message. + +`to' is the email address of the recipient of the message, and multiple +recipients may be given. + +The email is sent by forwarding to your local SMTP server, which then does the +normal delivery process. Your local machine must be running an SMTP server. +""" + +import sys +import os +import getopt +import smtplib +# For guessing MIME type based on file name extension +import mimetypes + +from email import Encoders +from email.Message import Message +from email.MIMEAudio import MIMEAudio +from email.MIMEMultipart import MIMEMultipart +from email.MIMEImage import MIMEImage +from email.MIMEText import MIMEText + +COMMASPACE = ', ' + + +def usage(code, msg=''): + print >> sys.stderr, __doc__ + if msg: + print >> sys.stderr, msg + sys.exit(code) + + +def main(): + try: + opts, args = getopt.getopt(sys.argv[1:], 'hd:', ['help', 'directory=']) + except getopt.error, msg: + usage(1, msg) + + dir = os.curdir + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + elif opt in ('-d', '--directory'): + dir = arg + + if len(args) < 2: + usage(1) + + sender = args[0] + recips = args[1:] + + # Create the enclosing (outer) message + outer = MIMEMultipart() + outer['Subject'] = 'Contents of directory %s' % os.path.abspath(dir) + outer['To'] = COMMASPACE.join(recips) + outer['From'] = sender + outer.preamble = 'You will not see this in a MIME-aware mail reader.\n' + # To guarantee the message ends with a newline + outer.epilogue = '' + + for filename in os.listdir(dir): + path = os.path.join(dir, filename) + if not os.path.isfile(path): + continue + # Guess the content type based on the file's extension. Encoding + # will be ignored, although we should check for simple things like + # gzip'd or compressed files. + ctype, encoding = mimetypes.guess_type(path) + if ctype is None or encoding is not None: + # No guess could be made, or the file is encoded (compressed), so + # use a generic bag-of-bits type. + ctype = 'application/octet-stream' + maintype, subtype = ctype.split('/', 1) + if maintype == 'text': + fp = open(path) + # Note: we should handle calculating the charset + msg = MIMEText(fp.read(), _subtype=subtype) + fp.close() + elif maintype == 'image': + fp = open(path, 'rb') + msg = MIMEImage(fp.read(), _subtype=subtype) + fp.close() + elif maintype == 'audio': + fp = open(path, 'rb') + msg = MIMEAudio(fp.read(), _subtype=subtype) + fp.close() + else: + fp = open(path, 'rb') + msg = MIMEBase(maintype, subtype) + msg.set_payload(fp.read()) + fp.close() + # Encode the payload using Base64 + Encoders.encode_base64(msg) + # Set the filename parameter + msg.add_header('Content-Disposition', 'attachment', filename=filename) + outer.attach(msg) + + # Now send the message + s = smtplib.SMTP() + s.connect() + s.sendmail(sender, recips, outer.as_string()) + s.close() + + +if __name__ == '__main__': + main() |