고정 파일 경로 대신 다른 첨부 파일을 보내는 win32com.client

Aug 18 2020

단일 첨부 파일에 대한 아래 스크립트를 사용하여 Outlook에서 다른 수신자에게 이메일을 보낼 수 있지만 for 루프를 사용하여 각 사용자에게 다른 첨부 파일을 보내려고하면 실패합니다.

현재 스크립트는 attachment = r'C:\Users\roy\Royfile.csv'. 그러나 나는을 원 attachment = file하므로 첨부 파일이 다른 사용자의 각 for 루프에서 변경됩니다. 이 부분은 작동하지 않습니다.

다른 사용자에 대한 다른 파일, Royfile.csv아래 예 . 그러나 그러한 파일이 50 개 더 있습니다.

Folder        FolderOwner    EmailAddress      AttachmentPath
C:\folder1\   Roy            [email protected]     Royfile.csv
D:\folder2\   Roy            [email protected]     Royfile.csv

같은 폴더의 두 번째 파일 Jackfile.csv:

Folder        FolderOwner    EmailAddress      AttachmentPath  
C:\folder3\   Jack            [email protected]   Jackfile.csv
D:\folder4\   Jack            [email protected]   Jackfile.csv 

예를 들어 세 번째 파일 Mandyfile.csv. 같은 방법으로 동일한 폴더에있는 50 명의 사용자에 대해 총 50 개의 파일이 있습니다.

Folder        FolderOwner    EmailAddress        AttachmentPath
C:\folder5\   Mandy            [email protected]   Mandyfile.csv
D:\folder6\   Mandy            [email protected]   Mandyfile.csv

Python 스크립트

import glob, as
import win32com.client as win32
import pandas as pd

for file in glob.glob("*file.csv"):
    print(file)

    email_list = pd.read_csv(file)
    names = email_list['FolderOwner']
    emails = email_list['EmailAddress']
    attachments = email_list['AttachmentPath']

    for i in range(len(emails)):
       print(file)
       name = names[i]
       email = emails[i]
       attachment = r'{}.csv'.format(attachments)
       with open(attachment, 'r') as my_attachment:
          myfile = my_attachment.read()
    
       outlook = win32.Dispatch('outlook.application')
       mail = outlook.CreateItem(0)
       mail.To = email
       mail.Subject = 'Message subject'
       mail.Body = 'Hello ' + name
       mail.Attachments.Add(attachment)
       mail.Send()
       break

첨부 파일 부분을 제거한 경우 스크립트의 현재 출력 :

Royfile.csv
Royfile.csv
Jackfile.csv
Jackfile.csv
Mandyfile.csv
Mandyfile.csv
...
..
.

지금 애착을 위해 필요한 일로 고군분투 = ???. 따라서 각 파일은 50 명의 사용자에게 전송됩니다.

답변

SrinathNeela Aug 18 2020 at 16:41

파일 이름이 어떻게 다른 폴더에 배포되는지 모르겠습니다. 모든 이름을 Excel 시트의 경로와 함께 하나의 열에 넣고 이름과 메일에 대해 수행하는 방식으로 반복하십시오

attachment = r'{}.csv'.format(filepaths from excel sheet)
   with open(attachment, 'r') as my_attachment:
      myfile = my_attachment.read()
ukki Aug 31 2020 at 00:56

마침내 내 질문에 대한 답을 찾았습니다. 아래는 전체 코드입니다. PATH가 누락되어 오류가 발생했습니다. win32com lib에는 스크립트가 첨부 파일과 동일한 폴더에서 실행 중이더라도 전체 경로가 필요합니다. 이제 완벽하게 작동합니다. :)

import glob, as
import win32com.client as win32
import pandas as pd

for file in glob.glob("*file.csv"):
    print(file)

    email_list = pd.read_csv(file)
    names = email_list['FolderOwner']
    emails = email_list['EmailAddress']
    attachments = email_list['AttachmentPath']
    PATH = "C:\\Users\\roy\\myfolder\\"

    for i in range(len(emails)):
       print("Sending email with " + file)
       name = names[i]
       email = emails[i]
       attachment = attachments[i]
       attachment1 = PATH + attachment 
       with open(attachment1, 'r') as my_attachment:
          myfile = my_attachment.read()
    
       outlook = win32.Dispatch('outlook.application')
       mail = outlook.CreateItem(0)
       mail.To = email
       mail.Subject = 'Message subject'
       mail.Body = 'Hello ' + name
       mail.Attachments.Add(attachment1)
       mail.Send()
       break