고정 파일 경로 대신 다른 첨부 파일을 보내는 win32com.client
단일 첨부 파일에 대한 아래 스크립트를 사용하여 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 명의 사용자에게 전송됩니다.
답변
파일 이름이 어떻게 다른 폴더에 배포되는지 모르겠습니다. 모든 이름을 Excel 시트의 경로와 함께 하나의 열에 넣고 이름과 메일에 대해 수행하는 방식으로 반복하십시오
attachment = r'{}.csv'.format(filepaths from excel sheet)
with open(attachment, 'r') as my_attachment:
myfile = my_attachment.read()
마침내 내 질문에 대한 답을 찾았습니다. 아래는 전체 코드입니다. 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