Python 3.7 smtplib sendmail 只发送给列表中的第一个收件人

Python 3.7 smtplib sendmail sends only to first recipient in list

我浏览了很多 SO 帖子和 smtplib 文档,一切似乎都是正确的,但是邮件只发送给列表中的第一个收件人

注意:我使用的是 Python3.7,我也从 Python 2.6 尝试过,在下面的情况下,邮件只被发送给接收者中的第一个收件人

下面是我的代码:

import smtplib
from email.mime.text import MIMEText


sender='from@domain.com'
receiver=['email1@domain.com', 'email2@domain.com', 'email3@domain.com']
msg = MIMEText("message")
msg['Subject'] = "Test Email"
msg['From'] = sender
msg['To'] = ",".join(receiver)

server = smtplib.SMTP("smtp.domain", 25)
sever.sendmail(sender, receiver, msg.as_string())
server.quit()

而不是

sever.sendmail(sender, receiver, msg.as_string())

使用

server.send_message(msg)

SMTP.send_message() 是一种发送 email.message.Message 对象的方法,它将使用 Message 对象中指定的发送者和接收者。在您的情况下,这将是变量 msg(MIMEText 是 Message 的子类)。

我不知道为什么,我按照你的方式使用它时遇到了类似的问题。可能是因为 to_addrs 指定了两次,因为 as_string() 将其添加到消息正文中,后面会发生什么我不知道。

to_addrs 在 SMTP.sendmail() 中被描述为:“要将此邮件发送到的地址列表。裸字符串将被视为具有 1 个地址的列表。”,这样很好.