我从另一个网站存储库中找到了此代码,并且它也用于使用Python和附加的文件发送电子邮件。它将文件编码到发送的base64中。在使用'.xlsx'文件之前,我已经测试了代码,并将其发送给问题。但是现在由于某种原因,该程序未发送。该文件与代码相同的文件夹中。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "FROM EMAIL"
toaddr = "TO EMAIL"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "SUBJECT"
body = "MESSAGE"
msg.attach(MIMEText(body, 'plain'))
filename = "05-11-2016 - Saturday.xlsx"
attachment = open("05-11-2016 - Saturday", "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "PASSWORD")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
我运行时,这是输出的错误:
line 21, in <module>
attachment = open("05-11-2016 - Saturday", "rb")
FileNotFoundError: [Errno 2] No such file or directory: '05-11-2016 - Saturday'
任何帮助将不胜感激。
您已经在上面的行中定义了filename
- 那么为什么不使用它呢?:)(您在open
语句中忘记了扩展名为" XLSX")
您现在已经了解了干原理的有用词:http://wiki.c2.com/?dontrepeatyourself
通过键入两次,您可以更改文件名定义而不注意open
使用另一个文件...
我只是使用我的凭据运行了您的代码,并在与代码相同的目录中制作了一个小的TXT文件以复制您的条件。这是您需要修改的内容:
filename = "ExplicitFileName.txt"
attachment = open("/USE/COMPLETE/PATH/TO/FILE/ExplicitFileName.txt", "rb")
或当Ilja指出的是干燥原则时,您可以这样做:
filename = "ExplicitFileName.txt"
attachment = open("/COMPLETE/PATH/TO/FILE/" + filename, "rb")
这两个都可以正常工作。