Python 对象没有属性';编码';

Python 对象没有属性';编码';,python,email,encoder,Python,Email,Encoder,我正在尝试将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()) Attribu

我正在尝试将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'

是否有其他方法可以将附加文件与正文消息一起发送?

s
是您通过
s=smtplib.SMTP(服务器,25)
创建的SMTP对象。因此,
s.sendmail(FROMADDR,TOADDR,message.as_string())
的参数应符合以下条件:

SMTP.sendmail(从地址、到地址、消息[、邮件选项、rcpt选项])

发邮件。所需参数包括RFC 822起始地址字符串、RFC 822起始地址字符串列表(裸字符串将被视为具有1个地址的列表)和消息字符串。调用者可以将要在MAIL FROM命令中使用的ESMTP选项列表(如8bitmime)作为MAIL_选项传递。应与所有RCPT命令一起使用的ESMTP选项(如DSN命令)可以作为RCPT_选项传递。(如果需要对不同的收件人使用不同的ESMTP选项,则必须使用低级方法,如mail()、rcpt()和data()来发送邮件。)


确保FROMADDR是一个字符串(不是列表),ToAddress应该是一个字符串或字符串列表(是RFC 822电子邮件格式的字符串)。

我对您的代码进行了一些修改,如果
TOADDR
是一个普通字符串而不是列表,它就会起作用。文档说它可以是一个列表,所以我不知道为什么会发生这种情况。谢谢你完成了这项工作。问题在于sendmail的附件部分。您可以看到ToAddress和FROMADDR都是一个字符串。在分配
['From']、['to']和['Subject']
部分后,尝试打印
消息
消息。对于多个收件人,请使用
消息['to']=','。加入(收件人)
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()