1

csv私のディレクトリには、次の名前の zip フォルダーがあります。

  • /home/local/user/project/zip_module/csv

この zip フォルダを添付してメールを送信したいと思います。

今までsmtplib モジュールを使ってPythonからメールを送っていたのですが、zipフォルダを添付してメールを送る方法がわかりません。

Google で検索しましたが、見つかったコードはメールを圧縮して送信するためのものであり、ファイルに zip をメールに添付するものではありません。

4

2 に答える 2

3

添付したい zip ファイルが'/home/local/user/project/zip_module/csv.zip'、 、 でありtosender宛先subjectアドレスtext、送信元アドレス、件名、メール本文がそれぞれ含まれているとします。

それで、

import smtplib, MimeWriter, mimetools, base64

message = StringIO.StringIO()
email_msg = MimeWriter.MimeWriter(message)
email_msg.addheader('To', to)
email_msg.addheader('From', sender)
email_msg.addheader('Subject', subject)
email_msg.addheader('MIME-Version', '1.0')

email_msg.startmultipartbody('mixed')

part = email_msg.nextpart()
body = part.startbody('text/plain')
part.flushheaders()
body.write(text)

file_to_attach = '/home/local/user/project/zip_module/csv.zip'
filename = os.path.basename(file_to_attach)
ftype, encoding = 'application/zip', None

part = email_msg.nextpart()
part.addheader('Content-Transfer-Encoding', encoding)
body = part.startbody("%s; name=%s" % (ftype, filename))
mimetools.encode(open(file_to_attach, 'rb'), body, encoding)

email_msg.lastpart()

email_text = message.getvalue()

smtplibを使用したのとemail_text同じようにメールを送信します。msg

例えば

smtp = smtplib.SMTP(SERVER, PORT)
smtp.login(USER, PASSWORD)
smtp.sendmail(sender, to, email_text)
smtp.quit()
于 2012-10-22T10:42:03.777 に答える
2

標準ライブラリのemailパッケージを試してください。text/plainこれにより、 (送信するテキストの)application/zip部分と ZIP ファイルの部分を含むことができるマルチパート MIME メッセージを作成できます。次に、メッセージを文字列にシリアル化し、smtplib.

于 2012-10-22T06:50:40.467 に答える