【问题标题】:Can't find file to send file as attachment in python在python中找不到将文件作为附件发送的文件
【发布时间】:2017-07-24 18:51:57
【问题描述】:

我从另一个网站存储库中找到了这段代码,它用于使用 python 发送电子邮件并附加一个文件。它在发送之前将文件编码为base64 br。在使用“.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'

任何帮助将不胜感激。

【问题讨论】:

  • 不应该是open('05-11-2016 - Saturday.xlsx', 'rb')吗?
  • 当我这样做时,消息已发送,但没有扩展名。所以它是一个没有扩展名的文件
  • 顺便说一句,谢谢你的提示,我只是尝试修改和使用你的脚本,它可以工作:)也许会有所帮助:)

标签: python email attachment mime smtplib


【解决方案1】:

我刚刚使用我的凭据运行了您的代码,并在与代码相同的目录中创建了一个小 txt 文件来复制您的条件。以下是您需要修改的内容:

filename = "ExplicitFileName.txt"
attachment = open("/USE/COMPLETE/PATH/TO/FILE/ExplicitFileName.txt", "rb")

或者正如 Ilja 指出的 DRY 原则,您可以这样做:

filename = "ExplicitFileName.txt"
attachment = open("/COMPLETE/PATH/TO/FILE/" + filename, "rb")

这两个都可以正常工作。

【讨论】:

    【解决方案2】:

    您已经在上面的行中定义了filename - 那么为什么不使用它呢? :) (您忘记了open 语句中的扩展名“xlsx”)

    您现在已经了解了 DRY 原理的有用之处: http://wiki.c2.com/?DontRepeatYourself

    通过键入两次,您可以更改文件名定义而不会注意到open 使用了另一个文件...

    【讨论】:

    • 我也试过了,它会发送消息,但没有 xlsx 文件扩展名。
    • 嗯,您打印的错误是“找不到文件”,原因在于文件名错误。并且使用正确的文件名发送文件,但收件人看到它的名称没有扩展名?这与查找本地文件无关,但必须是 sendmail-script 的设置。发送的文件是否正确(尝试在 .xlsx 中重命名并打开它)?也许如果您将part.add_header(...) 更改为其他字符串,您会看到会发生什么...?
    猜你喜欢
    • 2015-07-08
    • 2013-01-03
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多