python 发送的邮件有一个空白的收件人字段

python mails being sent out have a blank TO field

我有一个 python 发送电子邮件的脚本。电子邮件发送没有问题。

但是,当我收到邮件并打开它们时,它们的 "to:" 字段不显示收件人。它只是空白。我想显示所有收件人。而且由于我没有在我的脚本中使用任何 "bcc" 配置,所以我对这怎么可能感到困惑。

这是我使用的代码:

#!/usr/bin/env python

you = [ "MyEmail1@MyEmail.com", "MyEmail2@MyEmail.com" ]
for eachrecord in fformatErrMessage:
    # Preparing all variables #
    msg = MIMEMultipart()
    msg['Subject'] = subjectMsg
    part1 = MIMEText(text, 'plain')
    part2 = MIMEText(html, 'html')
    msg.attach(part1)
    msg.attach(part2)
    s = smtplib.SMTP('localhost')
    s.sendmail(me, you, msg.as_string())
    s.quit()

我试过将你替换为:

you = "MyEmail1@MyEmail.com"

认为列表可能是问题所在 - 但那没有用。

发送电子邮件时,服务器不会查看收件人:- 字段。相反,电子邮件服务器有一种单独的方式来传输收件人地址,有时称为 "envelope",它们用于路由和传递邮件。客户端永远不会收到该信封,而是使用消息中的 To:-字段 headers.

sendmail() 调用只是设置 SMTP 信封的地址。如果您希望收件人:字段显示在邮件中,您必须设置适当的 header:

msg['To'] = "foo@bar.com"

顺便说一下,这就是密件抄送的工作原理:信封上的地址根本不会在邮件中重复 headers。