我正在尝试使用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控制台上)会引发同样的错误。
真的很困惑,我会感谢任何评论,以解决我做错的事情
答案 0 :(得分:0)
我的错误就在这一行:
part.set_payload(attachment).read()
应该是:
part.set_payload(attachment.read())
@jwodder
发现错误