Ошибка атрибута: ‘list’ не имеет атрибута ‘encode’ при отправке вложения Excel через Python

#python

#python

Вопрос:

Мой код выглядит следующим образом. Переменная «attachment» возвращает статическое имя файла для тестирования «excel/test.xlsx «

 def send_email(snapshot_id, email):
    logging.info("Sending_email for snapshot_id %d to user %s", snapshot_id, email)

    attachment = get_attachment(snapshot_id, email)
    logging.info("Sending attachment %s", attachment)

    message = MIMEMultipart("alternative")
    message["Subject"] = "multipart test"
    message["From"] = sender
    message["To"] = email
    message['Date'] = formatdate(localtime=True)

    # write the plain text part
    text = """
    This is an automated email from the ARIEL reporting database, detailing key changes to Regulatory Tracking data for products, markets and categories you have subscribed to.
    """
    # write the HTML part
    html = """
    <html>
      <body>
        <p>Hi,<br>
           Check out the changes!!</p>       
        <p> Feel free to <strong>let us</strong> know what content would be useful for you!</p>
      </body>
    </html>
    """
    # convert both parts to MIMEText objects and add them to the MIMEMultipart message
    part1 = MIMEText(text, "plain")
    part2 = MIMEText(html, "html")
    message.attach(part1)
    message.attach(part2)

    part3 = MIMEBase('application', "octet-stream")
    part3.set_payload(open(attachment, "rb").read())
    encoders.encode_base64(part3)
    part3.add_header('Content-Disposition', 'attachment; filename="'   attachment   '"')
    message.attach(part3)

    # send your email
    with smtplib.SMTP(smtp_server, port) as server:

        server.sendmail(
            sender, email, message.as_string()
        )
  

Я получаю это сообщение об ошибке:

 AttributeError: 'list' object has no attribute 'encode'
Exception occurred
Traceback (most recent call last):
  File "C:/ariel_deltas/main.py", line 263, in <module>
    send_emails(snapshot_id)
  File "C:ariel_deltasemails.py", line 25, in send_emails
    send_email(snapshot_id, emails)
  File "C:ariel_deltasemails.py", line 73, in send_email
    sender, email, message.as_string()
  File "C:ProgramDataAnaconda3envsariellibemailmessage.py", line 158, in as_string
    g.flatten(self, unixfrom=unixfrom)
  File "C:ProgramDataAnaconda3envsariellibemailgenerator.py", line 116, in flatten
    self._write(msg)
  File "C:ProgramDataAnaconda3envsariellibemailgenerator.py", line 195, in _write
    self._write_headers(msg)
  File "C:ProgramDataAnaconda3envsariellibemailgenerator.py", line 222, in _write_headers
    self.write(self.policy.fold(h, v))
  File "C:ProgramDataAnaconda3envsariellibemail_policybase.py", line 326, in fold
    return self._fold(name, value, sanitize=True)
  File "C:ProgramDataAnaconda3envsariellibemail_policybase.py", line 369, in _fold
    parts.append(h.encode(linesep=self.linesep, maxlinelen=maxlinelen))
  

Комментарии:

1. Просто предположение, но вы, возможно, устанавливаете значение заголовка ‘To’ в список вместо строки через message["To"] = email

2. @JustinEzequiel Я отправлял электронные письма, а не электронную почту в функцию (т. Е. Список !!)

3. @JustinEzequiel добавьте это в качестве ответа, и я приму его, большое спасибо!!

Ответ №1:

Проверьте строку

 message["To"] = email
  

Возможно, вы устанавливаете в To заголовке список строк вместо строки.

Комментарии:

1. Я действительно отправлял список в функцию, спасибо