Python 发送的电子邮件的附件文本文件为空

Text File Attached to Email Sent with Python is Blank

我正在创建一个程序来创建一个文本文件,然后发送一封带有该文本文件作为附件的电子邮件。现在,当我创建文本文件时,它工作得很好,文本文件包含我需要的一切。但是,当我发送电子邮件时,我收到的附件是同名的空白文本文件。这是我创建附件并发送电子邮件的代码:

    def email(self, filename):
        attachment = open(filename, "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)    #the msg here is created earlier in the code with the body
        server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
        server.login(fromAddr, "password")
        text = msg.as_string()
        server.sendmail(fromAddr, (toAddr, ccAddr), text)
        server.quit()
        attachment.close()

我在代码中没有看到任何会导致附件为空的内容,因此非常感谢您的帮助。如果上面的代码有错别字,我很抱歉。我不认为这些是问题所在,因为我的代码中没有出现任何语法错误。

附加信息:我正在使用 PyDev 在 Eclipse 中对此进行编码。 下面是我实际创建消息的部分,以防有所不同。

    msg = MIMEMultipart()
    msg['From'] = fromAddr
    msg['To'] = toAddr
    msg['Cc'] = ccAddr
    msg['Subject'] = "This is the subject field for the email"
    body = "This is the text that is in the body of the email."
    msg.attach(MIMEText(body, 'plain')) 

更新:我可能已经知道发生了什么。我发送的文件非常小(大约 1K),所以我认为我所在的系统认为它是垃圾邮件并删除了其中的所有内容。当我增加文件的大小时(超过 4K 的任何地方)它会发送附件并且它有信息。但是,我现在 运行 遇到了一个新问题,我在附件中的一些信息被删除了。关于它被切断的地方似乎没有任何押韵或理由。有时,只有几行被切断,但有时我会丢失大约四分之一的数据。可能是什么原因造成的?

我看到的唯一可能导致问题的是行:

part.add_header('Content-Disposition', "attachment; filename= %s" % filename)

试试这样:

part.add_header('Content-Disposition', 'attachment; filename="%s"' % filename)

问题已解决。在我写完文件之前,我正在将文件读入附件。如果其他人遇到这种情况,请确保在读取文件以制作附件之前关闭正在写入的文件。