我试图将xlsx文件附加到我的电子邮件中。我查找了解决方案,它涉及使用email.encoders。但是当我使用这个解决方案时,我得到一个错误。我正在使用其他人工作的解决方案。
File "C:\Documents and Settings\Desktop\AppTera\dev\MTC_test\MTC_sender.py", line 41, in sendmail
s.sendmail(FROMADDR, TOADDR, message.as_string())
AttributeError: 'list' object has no attribute 'encode'
def sendmail():
SERVER = 'server.com'
FROMADDR = "joe@example.com"
TOADDR = ['bob@example.com']
CCADDR = ['bill@example.com']
message = MIMEMultipart('mixed')
message['From'] = FROMADDR
message['To'] = TOADDR
message['Subject'] = "Reporting for IVR Application"
BODY = "Hello Angela,\n\nI'm attaching the reports for %s/%s. These are the same reports\
you have requested in the past.\n\nPlease let me know if you need any additional reports.\n\n\
Thank you"% (str(MONTH), str(YEAR))
message.attach(MIMEText(BODY, 'plain'))
filename = "results.csv.xlsx"
path = r'C:\Documents and Settings\Desktop\MonthlyReports\MTC\%s_%s' % (str(YEAR), str(MONTH))
os.chdir(path)
fileMsg = MIMEBase('application', 'xlsx')
fileMsg.set_payload(open('results.csv.xlsx', 'rb').read())
encoders.encode_base64(fileMsg)
fileMsg.add_header('Content-Disposition','attachment;filename=results.csv.xls')
message.attach(fileMsg)
s = smtplib.SMTP(SERVER, 25)
s.set_debuglevel(1)
s.sendmail(FROMADDR, TOADDR, message.as_string())
s.quit()
我可以通过另一种方式发送附件和身体信息吗?
答案 0 :(得分:1)
s
是由s = smtplib.SMTP(SERVER, 25)
创建的SMTP对象。因此,s.sendmail(FROMADDR, TOADDR, message.as_string())
的参数应该符合documentation。
SMTP.sendmail(from_addr,to_addrs,msg [,mail_options,rcpt_options])
发送邮件。所需的参数是 RFC 822 来自地址的字符串, RFC 822 到地址字符串的列表(裸字符串将被视为具有1个地址的列表),和一个消息字符串。调用者可以传递一个ESMTP选项列表(例如8bitmime)以在MAIL FROM命令中用作mail_options。应与所有RCPT命令一起使用的ESMTP选项(例如DSN命令)可以作为rcpt_options传递。 (如果需要对不同的收件人使用不同的ESMTP选项,则必须使用低级方法(如mail(),rcpt()和data())来发送邮件。)
确保FROMADDR是一个字符串(不是列表),TOADDR应该是字符串或字符串列表( RFC 822 电子邮件格式字符串)。