win32com.client 发送不同的附件而不是固定的文件路径

win32com.client to send different attachments instead of fixed file path

我可以使用以下单个附件脚本向 Outlook 上的不同收件人发送电子邮件,但是如果我尝试使用 for 循环向每个用户发送不同的附件,则会失败。

当前脚本正在使用 attachment = r'C:\Users\roy\Royfile.csv'。但我想要 attachment = file,以便附件在每个 for 循环中为不同的用户更改。这部分不工作。

不同用户的不同文件,示例如下 Royfile.csv。但是还有 50 个这样的文件。

Folder        FolderOwner    EmailAddress      AttachmentPath
C:\folder1\   Roy            Roy@gmail.com     Royfile.csv
D:\folder2\   Roy            Roy@gmail.com     Royfile.csv

同一文件夹中的第 2 个文件 Jackfile.csv:

Folder        FolderOwner    EmailAddress      AttachmentPath  
C:\folder3\   Jack            Jack@gmail.com   Jackfile.csv
D:\folder4\   Jack            Jack@gmail.com   Jackfile.csv 

例如第 3 个文件 Mandyfile.csv。同样的方式,同一文件夹中的 50 个用户总共有 50 个文件。

Folder        FolderOwner    EmailAddress        AttachmentPath
C:\folder5\   Mandy            Mandy@gmail.com   Mandyfile.csv
D:\folder6\   Mandy            Mandy@gmail.com   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 sheet 中的路径放在一列中并遍历它们您处理姓名和邮件的方式

attachment = r'{}.csv'.format(filepaths from excel sheet)
   with open(attachment, 'r') as my_attachment:
      myfile = my_attachment.read()

终于找到了我的问题的答案,下面是完整的代码。 错误来了,因为缺少 PATH。 win32com 库需要完整路径,即使脚本 运行 在与附件相同的文件夹中。 现在完美运行。 :)

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