win32com.client เพื่อส่งไฟล์แนบที่แตกต่างกันแทนที่จะใช้เส้นทางไฟล์คงที่
ฉันสามารถส่งอีเมลไปยังผู้รับที่แตกต่างกันใน Outlook ด้วยสคริปต์ด้านล่างสำหรับไฟล์แนบเดียว แต่ถ้าฉันพยายามส่งไฟล์แนบที่แตกต่างกันไปให้ผู้ใช้แต่ละคนโดยใช้สำหรับการวนซ้ำมันก็ล้มเหลว
attachment = r'C:\Users\roy\Royfile.csv'
ปัจจุบันสคริปต์ที่ใช้ แต่ฉันต้องการattachment = file
เพื่อให้ไฟล์แนบเปลี่ยนไปในแต่ละวงสำหรับผู้ใช้ที่แตกต่างกัน ส่วนนี้ไม่ทำงาน
ไฟล์ที่แตกต่างกันสำหรับผู้ใช้ที่แตกต่างกันตัวอย่างRoyfile.csv
ด้านล่าง แต่มีไฟล์ดังกล่าวอีก 50 ไฟล์
Folder FolderOwner EmailAddress AttachmentPath
C:\folder1\ Roy [email protected] Royfile.csv
D:\folder2\ Roy [email protected] Royfile.csv
ไฟล์ที่ 2 ในโฟลเดอร์เดียวกันJackfile.csv
:
Folder FolderOwner EmailAddress AttachmentPath
C:\folder3\ Jack [email protected] Jackfile.csv
D:\folder4\ Jack [email protected] Jackfile.csv
ไฟล์ที่ 3 เช่น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