Comment envoyer un fichier zip en pièce jointe en python?

J'ai regardé à travers de nombreux tutoriels, ainsi que d'autres question, ici, sur un débordement de pile et de la documentation et des explications sont au minimum, juste inexpliquée code. Je voudrais envoyer un fichier que j'ai déjà zippée, et l'envoyer en pièce jointe. J'ai essayé de copier et de coller le code fourni, mais sa ne fonctionne pas, donc je ne peut pas résoudre le problème.

Alors ce que je demande si quelqu'un sait qui pour expliquer comment smtplib ainsi que le courrier électronique et le MIME, les bibliothèques de travailler ensemble pour envoyer un fichier, plus précisément, comment le faire avec un fichier zip. Toute aide serait appréciée.

C'est le code que tout le monde se réfère à:

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='[email protected]'):
    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()

Je soupçonne que le problème est présent code zip un fichier. Je ne veux pas zip tout ce que j'ai déjà un fichier zippé je voudrais envoyer. Dans les deux cas, ce code est mal documentée ainsi que le python bibliothèques elles-mêmes car elles fournissent aucune idée sur rien passé img fichiers et les fichiers de texte.

Mise à JOUR: Erreur j'en suis maintenant. J'ai également mis à jour ce qui est dans mon fichier avec le code ci-dessus

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', '[email protected]')
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)
Ce code ne fonctionne pas dans ce?
C'est... le deuxième exemple de code dans la documentation de l' email module. Vous devrez donner quelques détails pour obtenir une réponse qui ne sera pas essentiellement être une copie de cet échantillon.
Ce n'est pas une copie... je leur ai demandé de pouvoir expliquer comment il le fait ce dont j'ai besoin par le biais d'un fichier zip. Mais je vais poster le même code tout le monde se réfère constamment, mais ne l'explique pas...
Bien puis retirez la partie qui zip de nouveau le fichier à partir de votre code.
Pourquoi pensez-vous que l'envoi d'un fichier zip existant est tout différent de l'envoi d'un existant img ou un fichier texte?

OriginalL'auteur Andy | 2012-05-06