Python / smtplib - автоматизация для отправки электронной почты - PullRequest
0 голосов
/ 12 февраля 2020

Я разрабатываю приложение для автоматизации отправки писем из отдела сбора, где я работаю. Он состоит из доступа к электронной таблице Excel, чтения столбца, в котором отсутствует платеж, и отправки автоматического письма c клиенту. Код работает, но он отправляет электронное письмо только последнему, кто не совершил платеж, и не всем. можешь помочь мне? Следуйте приведенному ниже коду:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
from datetime import date
import openpyxl


wb = openpyxl.load_workbook('C:/temp/cobranca.xlsx')
sheet = wb['Sheet1']

lastCol = sheet.max_column
latestMonth = sheet.cell(row=1, column=lastCol).value

unpaidMembers = {}
for r in range(2, sheet.max_row + 1):
    payment = sheet.cell(row=r, column=lastCol).value
    if payment != 'ok':
        name = sheet.cell(row=r, column=1).value
        email = sheet.cell(row=r, column=2).value
        unpaidMembers[name] = email
        print(unpaidMembers)

# create message object instance
msg = MIMEMultipart()

# setup the parameters of the message
password = "example"
msg['From'] = "example@example.com"
msg['To'] = email
msg['Subject'] = "%s - Honorário em aberto." % (name)

for name, email in unpaidMembers.items():
    body = "Prezado(a) %s. \n \n Em nosso sistema consta, em sua conta, o honorário referente ao mês %s/2020 em aberto, pedimos sua regularização imediata. \n \n Caso o pagamento já tenha sido efetuado, por favor, desconsidere este e-mail. \n \n \n Att, \n OMNIA Tecnologia" % (
    name, latestMonth)
    print('Sending email to %s...' % email)

# add in the message body
msg.attach(MIMEText(body))

# create server
server = smtplib.SMTP('stmp.example.net', 587)

server.starttls()

# Login Credentials for sending the mail
server.login(msg['From'], password)

# send the message via the server.
server.sendmail(msg['From'], msg['To'], msg.as_string())

server.quit()

print("successfully sent email to %s:" % (msg['To']))

1 Ответ

0 голосов
/ 12 февраля 2020

msg['To'] может быть дан список адресов электронной почты. Возможно создание списка, как показано ниже, вариант.

email=[]
unpaidMembers = {}
for r in range(2, sheet.max_row + 1):
    payment = sheet.cell(row=r, column=lastCol).value
    if payment != 'ok':
        name = sheet.cell(row=r, column=1).value
        email.append(sheet.cell(row=r, column=2).value)
        unpaidMembers[name] = email
        print(unpaidMembers)

затем

msg['To'] = email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...