【问题标题】:smtplib, 'tuple' object has no attribute 'encode'smtplib,“元组”对象没有属性“编码”
【发布时间】:2017-10-28 17:43:45
【问题描述】:

我不知道如何解决这个问题。我检查了大多数 smtplib 线程和那些关于“AttributeError: 'tuple' object has no attribute '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'

【问题讨论】:

  • 什么是完整的回溯?这告诉我们这个异常发生在哪里,以及 Python 是如何到达那里的。
  • 这很重要,因为您发布的代码不会在任何地方调用encode()
  • 我怀疑是您的message['From'] 行才是真正的原因。你不能在那里使用元组。
  • 刚刚添加了所有错误信息

标签: python-3.x smtplib


【解决方案1】:

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

也制作这些字符串:

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

【讨论】:

  • 做得很好,tjanks 快速回复!
猜你喜欢
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 2016-10-10
  • 2020-12-04
  • 2020-01-27
  • 2022-01-21
  • 2013-06-21
  • 1970-01-01
相关资源
最近更新 更多