Python发送带有相应附件的电子邮件

问题描述

我有一个包含3个XLSX文件的桌面文件夹:ID1.xlsxID2.xlsxID3.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)