用Python(pywin32)发送带有附件的Outlook电子邮件

用Python(pywin32)发送带有附件的Outlook电子邮件,python,pandas,email,pywin32,Python,Pandas,Email,Pywin32,我正在尝试使用pywin32库用Python编写Outlook电子邮件。我有一个数据框,其中有一些收件人的电子邮件和附件路径。我想知道如何在每个唯一收件人下添加所有附件 print(my_df) Receiver_Email Attachment_Path HTMLBody john.doe@gmail.com C:/Users/Desktop/Attachment1.pdf HTMLBOD

我正在尝试使用pywin32库用Python编写Outlook电子邮件。我有一个数据框,其中有一些收件人的电子邮件和附件路径。我想知道如何在每个唯一收件人下添加所有附件

print(my_df)

Receiver_Email             Attachment_Path                          HTMLBody
john.doe@gmail.com         C:/Users/Desktop/Attachment1.pdf        HTMLBODY_1
john.doe@gmail.com         C:/Users/Desktop/Attachment2.pdf        HTMLBODY_1
john.doe@gmail.com         C:/Users/Desktop/Attachment3.pdf        HTMLBODY_1
sean.smith@hotmail.com     C:/Users/Desktop/Attachment11.pdf       HTMLBODY_2
sean.smith@hotmail.com     C:/Users/Desktop/Attachment22.pdf       HTMLBODY_2
sean.smith@hotmail.com     C:/Users/Desktop/Attachment33.pdf       HTMLBODY_2
我的代码如下所示:

for index, row in my_df.iterrows():
    outlook = client.Dispatch('Outlook.Application')
    mail = outlook.CreateItem(0)
    mail.To = row['Receiver_Email']
    mail.Subject = 'Greetings from Here!'
    mail.Body = 'Please find your attachment(s)'
    mail.Attachments.Add(row['Attachment_Path'])
    mail.HTMLBody = row['HTMLBODY']
    mail.Send()
然而,这将向john发送3封电子邮件。doe@gmail.com还有3封给肖恩的电子邮件。smith@hotmail.com. 我的预期输出将发送2封电子邮件(1封为john,1封为sean),每封邮件带有3个附件


有办法吗?谢谢你的帮助

对电子邮件地址执行
groupby
,创建唯一的数据帧,然后对邮件附件进行迭代。像这样的方法应该会奏效:

GB = my_df.groupby("Receiver_Email")
for ID , DF in GB:
    outlook = client.Dispatch('Outlook.Application')
    mail = outlook.CreateItem(0)
    mail.To = row['Receiver_Email']
    mail.Subject = 'Greetings from Here!'
    mail.Body = 'Please find your attachment(s)'
    for id , row in DF.iterrows():
        mail.Attachments.Add(row['Attachment_Path'])
    mail.Send()

谢谢@Q-man;它成功了,这正是我所需要的!如果我想为每个收件人在电子邮件中添加HTMLBODY,我该怎么做?