Ho esaminato molti tutorial e altre domande qui sullo stack overflow e la documentazione e le spiegazioni sono al minimo, solo codice non spiegato. Vorrei inviare un file che ho già zippato e inviarlo come allegato. Ho provato a copiare e incollare il codice fornito, ma non funziona, quindi non posso risolvere il problema.Come inviare un file zip come allegato in python?
Quindi, quello che sto chiedendo è se qualcuno sa a chi spiegare come smtplib e le e-mail e le librerie MIME lavorano insieme per inviare un file, in particolare, come farlo con un file zip. Qualsiasi aiuto sarebbe apprezzato.
Questo è il codice che si riferisce a tutti:
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()
Ho il sospetto che il problema è questo codice zip un file pure. Non voglio comprimere nulla perché ho già un file zippato che vorrei inviare. In entrambi i casi, questo codice è scarsamente documentato così come le librerie Python in quanto non forniscono informazioni su qualsiasi file img passato e di testo.
UPDATE: Errore sto ottenendo ora. Ho anche aggiornato ciò che è nel mio file con il codice sopra
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)
* Che codice * non funziona in * che * modo? – Cameron
Questo è ... il secondo esempio di codice nella documentazione per il modulo 'email'. Dovrai fornire alcune specifiche per ottenere una risposta che non sarà essenzialmente una copia di quel campione. – millimoose
Non è una copia ... Sto chiedendo loro di spiegare effettivamente come fa quello che mi serve attraverso un file zip. Ma posterò lo stesso codice a cui tutti si riferiscono costantemente ma non spiega ... – Andy