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

Roh*_*ala 4 python smtplib receiver python-3.7

我已经浏览了很多 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()
Run Code Online (Sandbox Code Playgroud)

Iam*_*ssT 5

代替

sever.sendmail(sender, receiver, msg.as_string())
Run Code Online (Sandbox Code Playgroud)

使用

server.send_message(msg)
Run Code Online (Sandbox Code Playgroud)

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

不知道为什么,我在使用的时候也遇到了类似的问题。可能是因为 to_addrs 被指定了两次,因为 as_string() 将其添加到消息正文中,以后会发生什么我不知道。

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

  • 为什么?单纯的代码响应对于整个社区来说很少有帮助。请记住,您的答案不仅应该针对OP,还应该针对其他可能在遥远的将来找到它的人。您应该添加一个解释,说明为什么您的代码可以解决该问题。 (4认同)