Movatterモバイル変換
[0]ホーム
Sending e-mails with attachments.
Steve Holdensholden at holdenweb.com
Fri Apr 27 14:05:04 EDT 2001
"Mikhail Astafiev" <mikle at tomsk.net> wrote in messagenews:mailman.988393790.7853.python-list at python.org...> [Env: Win2k, Python 1.52]>> Hi!>> I'm not familiar with Python. The code below works OK excluding that> message body is empty. I've tried a lot of variants but I'm always> getting either message without body, or message with body but attached> zip file is corrupted! :((> May be someone can tell me how to make the code below working, i.e.> generate message with body and proper zip file attached?..>> Thanks in advance.>> def generate_mime_message( from_address, to_address, subject,> file_to_send, file_name, write_to ):> """Generate multipart MIME message with attached file in base64encoding> Params: string from_address, to_address, subject> string file_to_send - path to existent ZIP file> string file_name - send zip with specified name> string write_to - store completed message to this file> Return: -""">> try:> fp=open( write_to, "wc")> except(Exception),err:> print "can't open file for writing '%s':%s. Abnormal functiontermination"%(write_to,err))> return>> toplevel=MimeWriter.MimeWriter(fp)>> toplevel.addheader("Date", time.ctime(time.time()))> toplevel.addheader("From", from_address )> toplevel.addheader("To", to_address )> toplevel.addheader("Subject" , subject )> toplevel.addheader("MIME-Version", "1.0")> toplevel.addheader("X-Mailer" , XMAILER )> toplevel.flushheaders()>> f=toplevel.startmultipartbody("mixed",> mimetools.choose_boundary(),> prefix=0)>> f.write("MESSAGE_BODY")>> # first toplevel body part> mfp = toplevel.nextpart()>> mfp.addheader("Content-Transfer-Encoding", "base64")> mfp.addheader("Content-Disposition",> "attachment; filename=\"%s\""%file_name)>> m = MimeWriter.MimeWriter (mfp.startbody("application/zip"))>> try:> fpin=open( file_to_send , "rb")> base64.encode(fpin, f )> fpin.close()> except(Exception),err:> print "can't open file '%s' to send:%s. Empty sectioncreated!"%(file_to_send,err))>> toplevel.lastpart()> fp.close()>Here's a tested example which may show you wehre you're going wrong.regards Steveimport MimeWriter, base64## Writes a multipart mail message: text plus associated graphic#mfile = "multimsg.eml"f = open(mfile, "w")# Create a MimeWritermail = MimeWriter.MimeWriter(f)mail.addheader("From", "Steve Holden <sholden at holdenweb.com")mail.addheader("To", """Gentle Reader <bookuser at holdenweb.com>, Steve Holden <sholden at holdenweb.com>""")mail.addheader("Subject", "The Python You Wanted")mail.addheader("Received", """from thinker [64.134.121.94] bymail.holdenweb.com (SMTPD32-6.04) id A244C78500BA; Fri, 09 Mar 2001 07:33:38 -0500""")# Mail will be multi-part: First part explains formatpart1 = mail.startmultipartbody ("mixed")part1.write("This is a MIME-encoded message, with attachments. ""If you are seeing this message your mail program probably cannot ""show you the attachments. Please try another program, or read 'Web ""Programming in Python' to see the attached picture.""""Sorry ...Steve Holden""")# Second part is intended to be readpart2 = mail.nextpart()f = part2.startbody("text/plain")f.write("Here we have a multipart message. This ""means that the message body must be processed ""as MIME-encoded content where possible [which ""it clearly is in Outlook Express].""""regards Your Humble Author""")# Third part is a graphic, which we encode in base64part3 = mail.nextpart()part3.addheader("Content-Transfer-Encoding", "base64")f = part3.startbody("image/gif", [["Name", "python.gif"]])b64 = base64.encodestring(open("pythonwin.gif", "rb").read())f.write(b64)# Never forget to call lastpart!mail.lastpart()
More information about the Python-listmailing list
[8]ページ先頭