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

时间:2014-07-02 16:09:12

标签: 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 的电子邮件地址列表时,它只会向列表的第一个元素发送一封电子邮件。传递 email_cc_list 的任何列表只是将地址添加到电子邮件中的抄送字段,但我认为它纯粹是装饰性的,因为抄送中的人没有看到电子邮件当我用这个函数发送它时发送邮件。基本上只有 email_to_list 中的第一个地址才会收到电子邮件。

1 个答案:

答案 0 :(得分:2)

documentation说:

  

所需的参数是RFC 822 from-address字符串,RFC 822 to-address字符串列表(裸字符串将被视为具有1个地址的列表)和消息字符串。

当您将emails_list_string + ", " + emails_cc_list_string传递给server.sendmail作为第二个参数时,它会将其视为单个地址,可能会在第一个逗号后删除所有内容。请尝试这样:

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