问题描述
我有一个包含3个XLSX文件的桌面文件夹:ID1.xlsx
,ID2.xlsx
,ID3.xlsx
我可以使用以下代码遍历3个电子邮件地址的列表,并将单个电子邮件发送到每个地址,但是它将所有XLSX文件附加到该文件夹中。
预期结果:我想将ID1.xlsx
附加到第一封电子邮件并发送,将ID2.xlsx
附加到第二封电子邮件并发送,最后将ID3.xlsx
附加到第三封电子邮件并发送。
email_addresses = ['test1@test.com','test2@test.com','test3@test.com']
class EmailsSender:
def __init__(self):
self.outlook = win32.dispatch('outlook.application')
def send_email(self,to_email_address,attachment_path):
mail = self.outlook.CreateItem(0)
mail.To = to_email_address
mail.Subject = 'Report'
mail.Body = """Report is attached."""
if attachment_path:
mail.Attachments.Add(Source=attachment_path,Type=olByValue)
mail.Send()
def send_emails(self,email_addresses,attachment_path=None):
for email in email_addresses:
self.send_email(email,attachment_path)
attachment_path = r'C:\Users\Desktop\Test\*.xlsx'
email_sender = EmailsSender()
email_sender.send_emails(email_addresses,attachment_path)
解决方法
您将需要通过电子邮件引用文件名,因此请切换到Dictionaries。
示例
email_addresses = {'test1@test.com': 'ID1.xlsx','test2@test.com': 'ID2.xlsx','test3@test.com': 'ID3.xlsx'
}
attachment_path = r'C:\Users\Desktop\Test'
for email,file in email_addresses.items():
print(email,attachment_path + file)