Как отправить zip-файл в виде вложения в python?

Я просмотрел множество руководств, а также другие вопросы здесь о переполнении стека, а документация и пояснения минимум, просто необъяснимый код. Я хотел бы отправить файл, который я уже заархивировал, и отправить его как вложение. Я попытался скопировать и вставить предоставленный код, но он не работает, поэтому я не могу решить проблему.

Итак, я спрашиваю, знает ли кто-нибудь, кто может объяснить, как smtplib, а также электронная почта и библиотеки MIME работают вместе для отправки файла, а точнее, как это сделать с zip-файлом. Любая помощь будет оценена по достоинству.

Это код, на который все ссылаются:

import smtplib
import zipfile
import tempfile
from email import encoders
from email.message import Message
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart    

def send_file_zipped(the_file, recipients, sender='you@you.com'):
    myzip = zipfile.ZipFile('file.zip', 'w')

    # Create the message
    themsg = MIMEMultipart()
    themsg['Subject'] = 'File %s' % the_file
    themsg['To'] = ', '.join(recipients)
    themsg['From'] = sender
    themsg.preamble = 'I am not using a MIME-aware mail reader.\n'
    msg = MIMEBase('application', 'zip')
    msg.set_payload(zf.read())
    encoders.encode_base64(msg)
    msg.add_header('Content-Disposition', 'attachment', 
               filename=the_file + '.zip')
    themsg.attach(msg)
    themsg = themsg.as_string()

    # send the message
    smtp = smtplib.SMTP()
    smtp.connect()
    smtp.sendmail(sender, recipients, themsg)
    smtp.close()

Я подозреваю, что проблема в том, что этот код также сжимает файл. Я не хочу ничего заархивировать, так как у меня уже есть заархивированный файл, который я хотел бы отправить. В любом случае этот код плохо документирован, как и сами библиотеки Python, поскольку они не дают никакого представления о чем-либо, кроме файлов img и текстовых файлов.

ОБНОВЛЕНИЕ :Ошибка, которую я получаю сейчас. Я также обновил то, что находится в моем файле, с кодом выше

Traceback (most recent call last):
File "/Users/Zeroe/Documents/python_hw/cgi-bin/zip_it.py", line 100, in <module>
send_file_zipped('hw5.zip', 'avaldez@oswego.edu')
File "/Users/Zeroe/Documents/python_hw/cgi-bin/zip_it.py", line 32, in send_file_zipped
msg.set_payload(myzip.read())
TypeError: read() takes at least 2 arguments (1 given)
9
задан Andy 6 May 2012 в 23:48
поделиться