smtplib,'tuple'对象没有属性'encode'

时间:2017-10-28 17:43:46

标签: python-3.x smtplib

我没有想法如何解决这个问题。我检查了大多数smtplib线程,那些关于“AttributeError:'tuple'对象没有属性'encode'”

我正在尝试创建消息模板以从Python3脚本发送电子邮件。出于某种原因,当我添加消息模板时,我无法以任何方式修复它。

import smtplib
import additional
import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

#server commends
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()

#credentials of sender
FROM = "xxx.gmail.com"
PASSWORD = additional.x #hidden password in other .py file

#logging in
server.login(FROM, PASSWORD)


#template for recievers
TOADDR = ["reciever email"]
CC = ["FIRST CC", "2ND CC"]
SUBJECT = "testing"
TEXT = "Let's check if this works and I joined everything correctly"

#MSG template

FINAL_TO = CC + [TOADDR]
message = MIMEMultipart()
message['From'] = "Michal", FROM
message['To'] = TOADDR
message['Cc'] = ", ".join(CC)
message['Subject'] = SUBJECT
message.attach(MIMEText(TEXT))

MSG = message.as_string()

#Join reciever with CC
FINAL_TO = CC + [TOADDR]


server.sendmail(FROM, FINAL_TO, MSG)

TIME = datetime.datetime.now()
print("Email sent at {}".format(TIME))

如上所述,我的输出是:

Traceback (most recent call last):
  File "/home/galander/Desktop/sending email/app.py", line 39, in <module>
    MSG = message.as_string()
  File "/usr/lib/python3.6/email/message.py", line 158, in as_string
    g.flatten(self, unixfrom=unixfrom)
  File "/usr/lib/python3.6/email/generator.py", line 116, in flatten
   self._write(msg)
  File "/usr/lib/python3.6/email/generator.py", line 195, in _write
    self._write_headers(msg)
  File "/usr/lib/python3.6/email/generator.py", line 222, in _write_headers
    self.write(self.policy.fold(h, v))
  File "/usr/lib/python3.6/email/_policybase.py", line 326, in fold
    return self._fold(name, value, sanitize=True)
  File "/usr/lib/python3.6/email/_policybase.py", line 369, in _fold
    parts.append(h.encode(linesep=self.linesep, maxlinelen=maxlinelen))
AttributeError: 'tuple' object has no attribute 'encode'

1 个答案:

答案 0 :(得分:5)

mime消息上的标题必须为字符串。您已为From分配了一个元组,并为To分配了一个列表。

制作这些字符串:

message['From'] = "Michal <{}>".format(FROM)
message['To'] = ', '.join(TOADDR)