Python电子邮件-只能将邮件发送到一个地址

2022-05-27 00:00:00 python email sendmail smtplib

问题描述

我的Sendmail函数如下所示:

MY_SMTP = #I can't show it here

def SendMail(authentication_data, email_from, email_to_list, email_cc_list, email_subject, email_message, list_file)
    user_name = authentication_data["name"]
    user_password = authentication_data["password"]
    msg = MIMEMultipart(email_message)
    server = smtplib.SMTP(MY_SMTP)
    server.starttls()
    emails_list_string = ", ".join(email_to_list)
    emails_cc_list_string = ", ".join(email_cc_list)

    msg["From"] = email_from
    msg["To"] = emails_list_string
    msg["Cc"] = emails_cc_list_string
    msg["Subject"] = "TEST"
    msg["Date"] = email.Utils.formatdate()

    msg.attach(MIMEText(email_message))

    server.login(user_name, user_password)
    server.sendmail(email_from, emails_list_string + ", " + emails_cc_list_string, msg.as_string())

    server.quit()

当我使用此函数传递Email_to_List的电子邮件地址列表时,它只向列表的第一个元素发送一封电子邮件。为mail_cc_list传递任何列表只会将地址添加到电子邮件中的抄送字段,但我认为这纯粹是装饰性的,因为当我使用此函数发送电子邮件时,抄送中的人看不到电子邮件。基本上只有Email_to_List中的第一个地址才会收到电子邮件。


解决方案

documentation表示:

必需的参数是RFC 822发件人地址字符串、RFC 822收件人地址字符串列表(空字符串将被视为具有1个地址的列表)和消息字符串。

当您将emails_list_string + ", " + emails_cc_list_string作为第二个参数传递给server.sendmail时,它会将其视为单个地址,可能会去掉第一个逗号之后的所有内容。改为尝试以下操作:

server.sendmail(email_from, email_to_list + email_cc_list, msg.as_string())

相关文章