win32com.client sabit dosya yolu yerine farklı ekler göndermek için
Tek bir ek için aşağıdaki komut dosyasıyla, görünümde farklı alıcılara e-posta gönderebiliyorum, ancak for döngüsünü kullanarak her kullanıcıya farklı ekler göndermeye çalışırsam, başarısız olur.
Şu anda komut dosyası kullanıyor attachment = r'C:\Users\roy\Royfile.csv'
. Ancak attachment = file
, farklı kullanıcılar için her bir for döngüsündeki ekin değişmesini istiyorum . Bu kısım çalışmıyor.
Farklı kullanıcılar için farklı dosyalar, Royfile.csv
aşağıdaki örnek . Ama 50 tane daha böyle dosya var.
Folder FolderOwner EmailAddress AttachmentPath
C:\folder1\ Roy [email protected] Royfile.csv
D:\folder2\ Roy [email protected] Royfile.csv
Aynı klasördeki 2. dosya Jackfile.csv
:
Folder FolderOwner EmailAddress AttachmentPath
C:\folder3\ Jack [email protected] Jackfile.csv
D:\folder4\ Jack [email protected] Jackfile.csv
Örneğin 3. dosya Mandyfile.csv
. Ve aynı klasördeki 50 kullanıcı için aynı şekilde toplam 50 dosya.
Folder FolderOwner EmailAddress AttachmentPath
C:\folder5\ Mandy [email protected] Mandyfile.csv
D:\folder6\ Mandy [email protected] Mandyfile.csv
Python Komut Dosyası
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
Ek parçasını kaldırırsam komut dosyasının mevcut çıktısı:
Royfile.csv
Royfile.csv
Jackfile.csv
Jackfile.csv
Mandyfile.csv
Mandyfile.csv
...
..
.
Şimdi ek için olması gerekenlerle mücadele = ???. Böylece her dosya 50 kullanıcıya gönderilir.
Yanıtlar
Dosyalarınızın farklı klasörlere nasıl dağıtıldıklarını nasıl adlandırdıklarını bilmiyorum, tüm adlarını excel sayfasındaki yollarla birlikte tek bir sütuna koymaya çalışın ve adlar ve postalar için yaptığınız gibi bunları yineleyin
attachment = r'{}.csv'.format(filepaths from excel sheet)
with open(attachment, 'r') as my_attachment:
myfile = my_attachment.read()
Sonunda sorum için cevap buldum, aşağıda tam kod var. PATH eksik olduğu için hata geliyordu. Win32com lib, komut dosyası eklerle aynı klasörde çalışıyor olsa bile tam yola ihtiyaç duyar. şimdi mükemmel çalışıyor. :)
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