Как мне в цикле послать письма?

Вот у меня есть такая функция,

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_mail():
  mailsender = smtplib.SMTP('smtp.gmail.com', 587)
  mailsender.starttls()
  mailsender.login('Адрес почты отправителя', 'Пароль к почте отправителя')
  mail_recipient = 'Адрес почты получателя'
  mail_subject = 'Тема сообщения'
  mail_body = 'Текст сообщения'
  msg = MIMEText(mail_body, 'plain', 'utf-8')
  msg['Subject'] = Header(mail_subject, 'utf-8')
  mailsender.sendmail('Адрес почты отправителя', mail_recipient, msg.as_string())
  mailsender.quit()
  print('Сообщение на адрес', mail_recipient, 'отправлено')
send_mail()

К примеру у меня есть цикл, где выводится в каждой новой строке, почтовые адреса, как мне послать сообщения этим адресатам? И сообщение тоже должно содержать переменные из другого цикла, надеюсь понятно объяснил. Как вариант пример:

mail_body = 'Скоро др у Вася 24.05 , Петя 10.10' вот ВасяПетя, и числа берутся из значений колонок таблиц. Ну и адреса кому отправить тоже берутся из значений таблиц.


Ответы (1 шт):

Автор решения: BlueScreen

Я видоизменил функцию send_mail, вынес вашу почту в отдельную переменную.

Теперь код выглядит так:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

mailsender = smtplib.SMTP('smtp.gmail.com', 587)
mailsender.starttls()
mailsender.login('Адрес почты отправителя', 'Пароль к почте отправителя')
mail_recipient = 'Адрес почты получателя'
your_email = 'Ваш em@il'

def send_mail(mail_subject, mail_body):
  msg = MIMEText(mail_body, 'plain', 'utf-8')
  msg['Subject'] = Header(mail_subject, 'utf-8')
  mailsender.sendmail(your_email, mail_recipient, msg.as_string())
  mailsender.quit()
  print('Сообщение на адрес', mail_recipient, 'отправлено')

while True:
    mail_subject = input()   #Вместо этого можно сделать считывание с БД.
    mail_body = input()
    send_mail(mail_subject, mail_body)
→ Ссылка