Python 将带有附件的电子邮件发送到列表/阵列,仅发送给列表中的最后一个人
电子邮件将发送给最后一个不符合Python 将带有附件的电子邮件发送到列表/阵列,仅发送给列表中的最后一个人,python,openpyxl,smtplib,Python,Openpyxl,Smtplib,电子邮件将发送给最后一个不符合if中设置的标准的人 我不明白为什么它不会将电子邮件发送给文件中符合条件的其他人 import smtplib, openpyxl, sys from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders wb = ope
if
中设置的标准的人
我不明白为什么它不会将电子邮件发送给文件中符合条件的其他人
import smtplib, openpyxl, sys from email.mime.multipart
import MIMEMultipart from email.mime.text
import MIMEText from email.mime.base
import MIMEBase from email
import encoders
wb = openpyxl.load_workbook('Book1.xlsx')
sheet = wb.get_sheet_by_name('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 != 'Y':
name = sheet.cell(row=r, column=1).value
email = sheet.cell(row=r, column=2).value
unpaidMembers[name] = email
fromaddr = "xxx@xxxx.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = email
msg['Subject'] = "Hi"
body = "Hello, This is a test message. Please check attachment"
msg.attach(MIMEText(body, 'plain'))
filename = "xxxxx.pdf"
attachment = open("\\\xxxx.pdf","rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)
smtp0bj = smtplib.SMTP('smtp-mail.outlook.com', 587)
smtp0bj.ehlo()
smtp0bj.starttls()
smtp0bj.login(fromaddr, 'xxxx')
text = msg.as_string()
smtp0bj.sendmail(fromaddr, email, text)
smtp0bj.quit()
email
设置为for循环中的最后一个值,这就是为什么它只将电子邮件发送给最后一个人
您应该做的是创建收件人列表,然后使用该信息:
...
...
recipients = []
unpaidMembers = {}
for r in range(2, sheet.max_row + 1):
payment = sheet.cell(row=r, column=lastCol).value
if payment != 'Y':
name = sheet.cell(row=r, column=1).value
email = sheet.cell(row=r, column=2).value
unpaidMembers[name] = email
recipients.append(email)
...
...
msg["To"] = ", ".join(recipients)
...
...
smtp0bj.sendmail(fromaddr, recipients, text)
请按照此SO帖子中的答案查看更多详细信息:谢谢。这非常有效。但是,我不想一次发送邮件给每个人,一次只发送一个收件人。i、 e.每个收件人一封邮件。我会读你贴的帖子。