python - 属性错误 : 'list' object has no attribute 'en

我想要这段代码,我可以在其中有一个 csv 文件,在一行电子邮件旁边有一行名称,然后通过电子邮件发送列表中的每一封电子邮件,但在消息中包含每个名称。 这是我的代码:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import csv


def nobrackets(current):
    return str(current).replace('[','').replace(']','')
def noastrick(current):
    return str(current).replace('\'','').replace('\'','')

email = 'xxxxxxxxxx'
password = 'xxxxxxxx'
send_to_email = []
subject = 'Whats up doc' # The subject line
message = ()
names = []
msg = MIMEMultipart()

msg['Subject'] = 'Whats up doc'

 # Attach the message to the MIMEMultipart object


server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
with open('Emails.csv','r') as csv_file:
    csv_reader=csv.reader(csv_file)
    for line in csv_reader:
        names.append(line[0])
        names_var = names
        send_to_email.append(line[1])
        send_to_email_var = send_to_email
        
        message = (f"Hey {noastrick(nobrackets(names_var))} how has your day been?")
        msg.attach(MIMEText(message, 'plain'))
        msg['From'] = 'xxxxxxxxx'

        msg['To'] = send_to_email_var

        server.login(email, password)
        text = msg.as_string() # You now need to convert the MIMEMultipart object to a string to send
        server.sendmail(email, send_to_email_var, text)
        names.clear()
        message = ()
        send_to_email = []
server.quit()

我得到的错误是 File/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/email/_policybase.py",第 369 行,在 _fold parts.append(h.encode(linesep=self.linesep, maxlinelen=maxlinelen))

AttributeError: 'list' 对象没有属性 'encode'

我将列表更改为变量的原因是因为我认为这可能会修复我遇到的错误。我对 python 有点陌生,我意识到错误出在一个名为 _policybase.py 的文件中,它可能就像内置在我安装在计算机上的 python 应用程序中一样,但我不知道如何编辑该文件或修复那个错误。

最佳答案

@snakecharmerb 的回答大部分是正确的:

The problem is that the code is setting msg['to'] to a list instead of a string. smtplib.server.sendmail will accept a list of strings as its toaddrs argument, but an email message does not (if multiple to addresses are required, call msg['to'] = address once for each address).

但是,您不需要通过 for 循环将邮件分别发送给每个收件人。相反,只需将列表作为逗号分隔的字符串分配给 msg["To"],如下所示:

msg["To"] = ", ".join(send_to_email_var)

关于python - 属性错误 : 'list' object has no attribute 'encode' when sending an email,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63044254/

相关文章:

python - GoogleTrans Python 不翻译

css - Marp-CLI : How to use a custom theme that im

javascript - 如何为 Angular Material Slide Toggle 设置默

c - 用C写的小程序

javascript - 将变量传递给自定义 Svelte Web 组件

r - 拆分字符串、标记子字符串并将标记转换为数字向量

reactjs - 避免在组件加载时对组件使用多个 useEffect

python - pandas Groupby 求和并连接

perl - 使用 sed 或 perl 替换两个字符之间的多个字符

javascript - 在嵌套导航器中导航时未定义 route.params?