Заполните электронные письма в Outlook с правильными вложениями - PullRequest
0 голосов
/ 10 января 2020

У меня есть функция, которая генерирует электронные письма Outlook и заполняет электронные письма вложениями, относящимися к адресу электронной почты.

df = pd.DataFrame(data = {'E-mail': ['peter@gmail.com', 'peter@gmail.com', 'jake@gmail.com', 'jake@gmail.com'],
                          'Fruit': ['apple.pdf', 'pear.pdf', 'orange.pdf', 'banana.pdf']})

Вот моя функция электронной почты.

def Email():
    for i in df['E-mail'].unique():
        outlook = win32.Dispatch('outlook.application')
        mail = outlook.CreateItem(0)
        mail.To = i
        mail.Subject = "Fruit reports" 

        for i,j in df.groupby('E-mail')['Fruit']:
            files = j.to_frame(i)

            for fil in files[i]:
                attachment = dirLoc + '\\' + fil
                mail.Attachments.Add(attachment)

        mail.Display(False)

Email()

У меня проблемы с моим for-l oop. Он присоединяет все вложения от Fruit вместо apple.pdf и pear.pdf до peter@gmail.com и orange.pdf и banana.pdf до jake@gmail.com.

Существует ли простое решение для выделения правильного вложения для нужного электронного письма?

1 Ответ

1 голос
/ 10 января 2020

Я бы сказал, что это потому, что вы снова перебираете все письма в for i, j in df.groupby('E-mail')['Fruit'] и фактически перезаписываете i.

Возможно, более чистым способом было бы сгруппировать только один раз, например, вот так:

import os

...

def send_all_mail(df):
    outlook = win32.Dispatch('outlook.application')

    for dest_mail, group in df.groupby('E-Mail'):
        mail = outlook.CreateItem(0)
        mail.To = dest_mail
        mail.Subject = "Fruit reports"

       for fname in group['Fruits'].unique():
           attachment = os.path.join(dirLoc, fname)
           mail.Attachments.Add(attachment)
       mail.Display(False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...