如何在python中向多个组发送smtplib电子邮件


import smtplib
from email.message import EmailMessage
list1=[
'Person 1 <email1@outlook.com>',
'Person 2 <email2@gmail.com>'
]

list2=[
'Person 3 <email3@yahoo.com>',
'Person 4 <email4@hotmail.com>'
]

masterlist = [list1, list2]
for x in masterlist:
receivers = ", ".join(x)
msg = EmailMessage()
msg['Subject'] = 'This is a Test Email'
msg['From'] = 'Person 5 <email5@outlook.com>'
msg['To'] = receivers
msg.set_content('Ignore this message')
with smtplib.SMTP('smtp.outlook.com', 587) as smtp:
smtp.send_message(msg)

这是我使用过的代码。我想将此电子邮件发送到某些组,但将所有电子邮件加入一封电子邮件中。按照我现在的方式,只会将电子邮件发送到最后一个电子邮件列表。我应该如何修改才能将其发送到多个电子邮件列表?

您只将最后一份电子邮件列表传递给msg['To'],因为程序会用lst中的最后一项覆盖以前的lst分配。那么,为什么要将这两个列表连接起来,向每个人发送电子邮件呢?

#masterlist = [list1, list2]
#for x in masterlist:
#receivers = ", ".join(x)
# The .join() function doesn't do much in this situation because your lists are already separated by commas.
msg = EmailMessage()
msg['Subject'] = 'This is a Test Email'
msg['From'] = 'Person 5 <email5@outlook.com>'
msg['To'] = list1 + list2 # or use .extend() function the same is accomplished
msg.set_content('Ignore this message')

所以去掉masterlist变量和for循环。

import smtplib
from email.message import EmailMessage
list1=[
'Person 1 <email1@outlook.com>',
'Person 2 <email2@gmail.com>'
]

list2=[
'Person 3 <email3@yahoo.com>',
'Person 4 <email4@hotmail.com>'
]

masterlist = [list1, list2]
for x in masterlist:
msg = EmailMessage()
msg['Subject'] = 'This is a Test Email'
msg['From'] = 'Person 5 <email5@outlook.com>'
msg['To'] = x
msg.set_content('Ignore this message')
with smtplib.SMTP('smtp.outlook.com', 587) as smtp:
smtp.send_message(msg)

我能够通过将电子邮件部分设置为基于电子邮件列表的for循环来纠正这一问题。

最新更新