Przeszukałem wiele samouczków, a także inne pytania dotyczące przepełnienia stosu, a dokumentacja i wyjaśnienie są ograniczone do minimum, a kod jest niewytłumaczalny. Chciałbym wysłać plik, który już skompresowałem i wysłać jako załącznik. Próbowałem skopiować i wkleić podany kod, ale nie działa, dlatego nie mogę naprawić problemu.Jak wysłać plik zip jako załącznik w pythonie?
To, o co pytam, to czy ktoś wie, kto wyjaśnia, w jaki sposób smtplib, a także e-maile i biblioteki MIME współpracują ze sobą, aby wysłać plik, a dokładniej, jak to zrobić z plikiem zip. Każda pomoc będzie doceniona.
Jest to kod, który każdy odnosi się do:
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()
Podejrzewam, że problem jest ten kod zamki plik jako dobrze. Nie chcę niczego spakować, ponieważ mam już spakowany plik, który chciałbym wysłać. W obu przypadkach kod ten jest słabo udokumentowany, a także same biblioteki Pythona, ponieważ nie zapewniają wglądu w nic poza plikami img i tekstowymi.
AKTUALIZACJA: Błąd pojawia się teraz. Zaktualizowałem także zawartość mojego pliku pod kodem powyżej:
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)
* Jaki * kod nie działa w * jaki * sposób? – Cameron
To jest ... drugi przykład kodu w dokumentacji modułu 'email'. Będziesz musiał podać kilka szczegółów, aby uzyskać jakąkolwiek odpowiedź, która nie będzie w zasadzie kopią tego przykładu. – millimoose
To nie jest kopia ... Proszę, aby wyjaśnił, jak robi to, czego potrzebuję, poprzez plik zip. Ale opublikuję ten sam kod, do którego wszyscy nieustannie się odwołują, ale nie wyjaśnia ... – Andy