faqts : Computers : Programming : Languages : Python : Modules : smtplib

+ Search
Add Entry AlertManage Folder Edit Entry Add page to http://del.icio.us/
Did You Find This Entry Useful?

9 of 18 people (50%) answered Yes
Recently 6 of 10 people (60%) answered Yes

Entry

How can I send a binary file attachment using smtplib?

Feb 29th, 2000 20:32
Nathan Wallace, Oleg Broytmann


#! /usr/local/bin/python -O

import sys, os, string
from mimetools import choose_boundary
from MimeWriter import MimeWriter
import base64

try:
   from cStringIO import StringIO
except ImportError:
   from StringIO import StringIO
   

def gen_mime(zip_file):
   email_from = "Oleg Broytmann <phd2@mail.com>"
   email_to = "you@your.some.host"

   #sendmail = open("sendmail", 'w')
   sendmail = os.popen("/usr/sbin/sendmail '%s'" % email_to, 'w')
   sendmail.write("""From: %s
To: %s
Subject: %s
Precedence: bulk
MIME-Version: 1.0
""" % (email_from, email_to, zip_file))

   mime = MimeWriter(sendmail)

   firstpart = mime.startmultipartbody("related")
   firstpart.write("""\
   Your mailer does not support MIME encoding. Please upgarde to
MIME-enabled mailer (almost every modern mailer is MIME-capable).
""")

   subwriter = mime.nextpart()
   subwriter.addheader("Content-Transfer-Encoding", "base64")
   subwriter.addheader("Content-Disposition", "inline; filename=\"%s\""
%
zip_file)
   subwriter.startbody("application/zip")

   zip_file = open(zip_file, 'r')
   base64.encode(StringIO(zip_file.read()), sendmail)
   zip_file.close()

   mime.lastpart()
   sendmail.close()


def run():
   zip_file = sys.argv[1]
   gen_mime(zip_file)


if __name__ == '__main__':
   run()