smtplib发送邮件失败:“‘list‘ object has no attribute ‘encode‘”

在使用smtplib发送邮件时遇到了“'list' object has no attribute 'encode'”报错,问题已解决。

快速解决

smtplib发送邮件时需要填写两次收件人“见下文代码”。

第一个收件人的位置要求传入字符串,第二个收件人的位置支持多种数据类型:“字符串、列表”。

如果你想发送邮件给多个收件人,将这些收件人保存在一个列表中,将这个列表传入到第一个位置就会导致'list' object has no attribute 'encode'。

解决方案就是使用下面示例中的join,将其处理为字符串。你和

import smtplib
from email.mime.text import MIMEText

def send_email(env,emails):

    # 发件服务器信息
    smtp_server = "smtp.163.com"
    smtp_port = 465
    smtp_sender = "Account_Me@163.com"
    smtp_password = "Password"

    # 发件人&收件人
    email_sender = ["Account_Me@163.com"]
    email_receivers = ["Account_1@163.com","Account_2@163.com"]

    # 邮件信息
    email_subject = "测试邮件"
    email_body = "这是一封测试邮件"

    # 邮件头部信息
    message = MIMEText(email_body, "plain", "utf-8")
    message["From"] = smtp_sender
    message["To"] = ",".join(email_receivers)   # 这里有收件人
    message["Subject"] = email_subject

    # 连接服务器发送邮件
    try:
        server = smtplib.SMTP_SSL(smtp_server, smtp_port)
        server.login(smtp_sender, smtp_password)
        server.sendmail(smtp_sender, email_receivers, message.as_string())  # 这里也有收件人
        server.quit()
    except Exception as e:
        print(e)
详细信息

一封电子邮件的发送涉及到“两种收件人”。第一种是我们阅读邮件可以看到的收件人,第二种是邮件服务器处理时真正投递的收件人。

在真正与SMTP服务器交互时使用的server.sendmail()中传入的收件人被称为“信封收件人”,这个收件人决定了“服务器会将邮件发送到谁的邮箱里”。

而在邮件头部信息中标识的message["To"]被称为“信内收件人”,这个收件人不涉及到邮件的投递,它可以决定我们最终阅读邮件时显示的收件人。

举例
message["To"] = "Tom"
server.sendmail(receivers = "Mike")

如果我们这样发送邮件,SMTP服务器在处理时会将邮件只投递给Mike。但Mike最终看到此邮件时会疑惑”收件人里怎么只写了个Tom?“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值