win32com.client untuk mengirim lampiran berbeda alih-alih jalur file tetap
Saya dapat mengirim email ke penerima yang berbeda pada pandangan dengan skrip di bawah ini untuk lampiran tunggal, tetapi jika saya mencoba mengirim lampiran yang berbeda ke setiap pengguna menggunakan for loop, maka gagal.
Saat ini skrip sedang digunakan attachment = r'C:\Users\roy\Royfile.csv'
. Tapi saya ingin attachment = file
, sehingga lampiran berubah di setiap loop for untuk pengguna yang berbeda. Bagian ini tidak berfungsi.
File berbeda untuk pengguna berbeda, contoh di Royfile.csv
bawah ini. Tapi ada 50 file seperti itu.
Folder FolderOwner EmailAddress AttachmentPath
C:\folder1\ Roy [email protected] Royfile.csv
D:\folder2\ Roy [email protected] Royfile.csv
File ke-2 di folder yang sama Jackfile.csv
:
Folder FolderOwner EmailAddress AttachmentPath
C:\folder3\ Jack [email protected] Jackfile.csv
D:\folder4\ Jack [email protected] Jackfile.csv
File ke-3 misalnya Mandyfile.csv
. Dan dengan cara yang sama total 50 file untuk 50 pengguna dalam folder yang sama.
Folder FolderOwner EmailAddress AttachmentPath
C:\folder5\ Mandy [email protected] Mandyfile.csv
D:\folder6\ Mandy [email protected] Mandyfile.csv
Skrip 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
Output skrip saat ini jika saya menghapus bagian lampiran:
Royfile.csv
Royfile.csv
Jackfile.csv
Jackfile.csv
Mandyfile.csv
Mandyfile.csv
...
..
.
Berjuang sekarang dengan apa yang dibutuhkan untuk keterikatan = ???. Sehingga setiap file dikirim ke 50 pengguna.
Jawaban
Saya tidak tahu bagaimana nama file Anda bagaimana mereka didistribusikan di folder yang berbeda, coba masukkan semua nama mereka bersama dengan jalur di lembar excel dalam satu kolom dan ulangi melalui mereka seperti yang Anda lakukan untuk nama dan surat
attachment = r'{}.csv'.format(filepaths from excel sheet)
with open(attachment, 'r') as my_attachment:
myfile = my_attachment.read()
Menemukan jawaban untuk pertanyaan saya akhirnya, di bawah ini adalah kode lengkap. Kesalahan datang, karena ada PATH yang hilang. win32com lib membutuhkan jalur lengkap meskipun skrip berjalan di folder yang sama dengan lampiran. bekerja dengan sempurna sekarang. :)
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