[Email-SIG] Generating zipped or gzipped attachment with email package?
Tony Nelson
tonynelson at georgeanelson.com
Thu May 21 20:04:47 CEST 2009
At 11:23 -0500 05/21/2009, skip at pobox.com wrote:
>(I posted this earlier to python-list at python.org then remembered we have an
>email package sig. I hope it's ok to ask usage questions here...)
>
>I have a script which allows me to generate MIME messages with appropriate
>attachments. It's essentially a lightly modified version of the second
>example from this page of the email package docs:
>
> http://docs.python.org/library/email-examples.html
>
>I want to modify my script to automatically zip or gzip files which exceed
>some size threshold. Doing the zip/gzip dance is no problem. I'm concerned
>about how to specify that properly with the email package. For example,
>consider a large CSV file. I figure out the MIME type is text/csv. Now
>suppose I gzip the file before attaching it. How would this code change to
>specify the compression where "path" is now compressed?
>
> if maintype == 'text':
> fp = open(path)
> # Note: we should handle calculating the charset
> msg = MIMEText(fp.read(), _subtype=subtype)
> fp.close()
>
>I guess I'm asking if I can have the Content-Type still be text/csv with
>some other MIME header indicating the file is compressed. If so, how do I
>achieve that when attaching the compressed file to the message?
I think (untested):
if maintype == 'text':
fp = open(path)
data = fp.read()
fp.close()
name = os.basename(path)
if len(data) > datamax:
# do the zip/gzip compression to data
# set _subtype to 'zip' or 'x-gzip', or omit for octet-stream
msg = MIMEApplication( data,
_subtype='zip',
_encoder=email.encoders.encode_base64,
name=name )
else:
msg = MIMEText(data)
del msg['Content-Disposition'] # paranoia
msg.add_header('Content-Disposition',
'attachment', # or 'inline' and omit the name
filename=name )
This will set the Content-Type: to "application/zip", reflecting the actual
type, encode to Base64 so the payload is ASCII, also setting the
Content-Transfer-Encoding, set a default name, and tell the MUA whether to
try to display the payload or save it as a file (also setting a default
name).
--
____________________________________________________________________
TonyN.:' <mailto:tonynelson at georgeanelson.com>
' <http://www.georgeanelson.com/>
More information about the Email-SIG
mailing list