代码之家  ›  专栏  ›  技术社区  ›  michael93pl

smtplib,“tuple”对象没有属性“encode”

  •  4
  • michael93pl  · 技术社区  · 7 年前

    我不知道如何解决这个问题。我检查了大多数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 回复  |  直到 7 年前
        1
  •  10
  •   Martijn Pieters    7 年前

    mime消息上的标题 必须 是字符串。您已将元组分配给 From ,以及 To .

    也制作这些字符串:

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