2016-02-12 70 views
0

我想使用Python3脚本将每天的电子邮件自动化为一个收件人。该电子邮件应该带有附件。Python 3 - 附件错误

目前我正在尝试下面的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 = "[email protected]" 
toaddr = "[email protected]" 

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' 

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

作为实在不明白,我会感谢任何意见,以解决我的错做

+0

你期望行'part.set_payload(attachment).read ()'做什么?它看起来像你的第一个'''末尾:'part.set_payload(attachment.read())' – jwodder

+0

感谢您的帮助,您的评论解决了我的问题。我无法看到我的错误。 –

+0

@J_CsT:如果你找到了你的问题的答案,然后张贴答案并接受它。它对每个人都有好处。 –

回答

0

我的错误是在这一行:

part.set_payload(attachment).read() 

这应该是:

part.set_payload(attachment.read()) 

错误被@jwodder发现