Python 3 - 附件错误

时间:2016-02-12 17:17:03

标签: python

我正在尝试使用Python3脚本将每日电子邮件自动发送给一位收件人。该电子邮件应该带有附件。

目前我正在尝试以下Python 3.5代码,难以置信仅成功运行一次。

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 = "me@home.net"
toaddr = "theother@home.biz"

msg = MIMEMultipart()

msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Daily report"

body = "Email text"

msg.attach(MIMEText(body, 'plain'))

filename = 'DAILY REPORT.xls'
attachment = open('Z:\\DAILY REPORT.xls', "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.server.biz', 25)
server.starttls()
server.login(fromaddr, "apasswordhere")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

第一次工作后(收到电子邮件+附件),它似乎不再起作用了。我不断得到的例外是:

  Traceback (most recent call last):
  File "Z:/main.py", line 23, in <module>
    part.set_payload(attachment).read()
AttributeError: 'NoneType' object has no attribute 'read'

请注意,附加到电子邮件messange和python脚本的文件位于远程NAS上,在Windows Server 2012上本地显示为Z:。 在这个系统上,我在两个不同的目录中安装了Pyton2和Python3。当从consolle调用python.exe时,我的系统默认在Python2上,但是如果我使用Python3开发我的脚本,我会得到同样的错误。 在我的编辑器中运行脚本(Pyecharm默认在Python3控制台上)会引发同样的错误。

真的很困惑,我会感谢任何评论,以解决我做错的事情

1 个答案:

答案 0 :(得分:0)

我的错误就在这一行:

part.set_payload(attachment).read()

应该是:

part.set_payload(attachment.read())

@jwodder

发现错误