Как я могу отправить электронное письмо smtplib нескольким группам на python?

#python #email #join #smtplib

#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)
  

Это код, который я использовал.Я хотел бы отправить это электронное письмо определенным группам, но не объединять все электронные письма в одно электронное письмо. То, как у меня сейчас, заканчивается отправкой электронного письма только в последний список электронных писем. Как я должен изменить это, чтобы иметь возможность отправлять его в несколько списков электронных писем?

Комментарии:

1. receivers = list1 list2

2. У меня была опечатка в моем сообщении. Я пытался отправить электронное письмо в каждый список отдельно. Я считаю, что, сделав receivers = list1 list2 , я в конечном итоге отправляю электронное письмо всем людям в одном электронном письме.

Ответ №1:

Вы передаете только последний список электронных писем 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 цикла.

Комментарии:

1. Извините, в моем исходном сообщении была опечатка. Я хочу, чтобы это отправляло два отдельных электронных письма, по одному для каждого списка электронных писем. list1 list2 отправляет электронное письмо всем сторонам.

Ответ №2:

 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 на основе списка электронных писем.