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)
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
Vous devez vous connecter pour publier un commentaire.
Je ne vois vraiment pas le problème. Juste omettre la partie qui crée le fichier zip et, au lieu de cela, il suffit de charger le fichier zip que vous avez.
Essentiellement, cette partie ici
crée la pièce jointe. Le
définit, ainsi, la charge utile de l'attachement à ce que vous lisez à partir du fichier
zf
(ce qui signifie probablement fichier zip).Il suffit d'ouvrir votre fichier zip à l'avance et de laisser cette ligne de lire.
Les docs indiquer le deuxième argument, charset, est facultative.
Je vais vous montrer l'erreur que je reçois et le code mis à jour comme vous m'avez dit probablement faire. J'apprécie l'aide.
C'est le
myzip.read()
qui prend deux arguments, carmyzip
est une instance de laZipFile
classe. Je pense que le fichier que vous souhaitez envoyer doit être ouvert normalement, c'est à dire quelque chose commezf = open('file.zip', 'rb')
puismsg.setpayload(zf.read())
.Ok, je vais essayer ça. Je vous remercie beaucoup.
OriginalL'auteur glglgl
Je suis d'accord le forfait de courriel n'est pas bien documentée encore. J'ai étudié avant et a écrit un module emballage qui simplifie la gestion de ces types de tâches. Par exemple, les ouvrages suivants:
Et c'est tout ce que vous devez une fois que vous avez tout installé et configuré. 🙂
Il est open source, donc il peut être facilement obtenu.
Oh...ne sais pas comment on pourrait savoir que, bien que, au moins à partir de votre réponse seul.
Je suppose que l'OP va demander à ce sujet si vous êtes intéressé. Ou on pourrait tout google le nom du package. 😉
Salut j'ai la même exigence, mais après l'installation de pycopia et quand j'ai essayé "de pycopia importation ezmail", le message suivant est affiché ImportError: impossible d'importer nom ezmail, mais quand j'ai essayé d'importer pycopia, qui a travaillé en fait, y je n'arrive pas à importer ezmail?
OriginalL'auteur Keith