win32com.client sabit dosya yolu yerine farklı ekler göndermek için

Aug 18 2020

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.csvaş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

SrinathNeela Aug 18 2020 at 16:41

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()
ukki Aug 31 2020 at 00:56

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