es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Python AtributeError _io.TextIOWrapper’ object has no attribute ‘encode’ Error de atributo de Python: el objeto _io.TextIOWrapper no tiene el atributo ‘encode’.

Estoy escribiendo un código que envía correos electrónicos a una lista de correos desde un archivo .xlsx.

Quiero que el cuerpo del correo electrónico se importe desde un archivo .html separado, pero estoy obteniendo un error de codificación cuando llega a la línea 47 (htmlPart = MIMEText(f, ‘html’)).

El objeto ‘_io.TextIOWrapper’ no tiene el atributo ‘encode’.

Aquí está mi código:

from email.message import Message
import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

your_email = "XXXXX"
your_password = "XXXXX"

server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(your_email, your_password)

message = MIMEMultipart("alternative")

email_list = pd.read_excel(r"C:\Users\fernando.martinez\Desktop\MAILS2.xlsx")

names = email_list['Name']
emails = email_list['Mail']
for i in range(len(emails)):
    name = names[i]
    email = emails[i]

    message = MIMEMultipart("alternative")

    message['From'] = your_email
    message['To'] = email
    message['Subject'] = "SUBJECT HERE"

    with open('emails.html', 'r') as f: 
        html_string = [line.rstrip('\n') for line in f]

    htmlPart = MIMEText(f, 'html')

    message.attach(htmlPart)

    server.send_message(message)

server.close()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el error de codificación, debes cambiar la línea 45 (htmlPart = MIMEText(f, ‘html’)) a htmlPart = MIMEText(”.join(html_string), ‘html’). Esto se debe a que la función MIMEText toma una cadena, no un archivo. Al utilizar el método ”.join(), puedes concatenar la lista de cadenas en una sola cadena que se puede pasar como argumento a MIMEText.

Comments are closed.