我浏览了许多教程,以及关于堆栈溢出的其他问题,文档和解释至少是无法解释的代码。我想发送一个我已经压缩的文件,并将其作为附件发送。我尝试复制和粘贴提供的代码,但它不起作用,因此我无法解决问题。
所以我要问的是,是否有人知道谁来解释 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)