2017-01-12 2 views
0

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 = "[email protected]" 

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

答えて

0

emailためのループの最後の値に設定し、それが唯一の最後の人に電子メールを送信している理由ですされています。

何をすべきことは、受信者のリストを作成し、その情報を使用している:

... 
... 
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詳細は投稿:How to send email to multiple recipients using python smtplib?

+0

感謝を。それは完璧に働いた。しかし、一度に1人の受信者ではなく全員に一度にメールを送信したくない。 1つの受信者につき1つのメール。私はあなたが投稿したスレッドを読むでしょう。 – Sid

関連する問題