附加到使用Python发送的电子邮件的文本文件为空

时间:2015-07-15 17:38:59

标签: python email smtp pydev email-attachments

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

    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)它会发送附件,它有信息。但是,我现在遇到一个新问题,因为附件中的某些信息被删除了。关于它被切断的地方似乎没有任何押韵或理由。有时,只有几行被切断,但有时候我会丢失大约四分之一的数据。可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

B b = new B();
A a = new A(b);

请尝试这样:

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