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

我可以使用以下单个附件脚本向 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

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


Folder        FolderOwner    EmailAddress      AttachmentPath  

C:\folder3\   Jack            Jack@gmail.com   Jackfile.csv

D:\folder4\   Jack            Jack@gmail.com   Jackfile.csv 

例如第三个文件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 个用户。


慕哥9229398
浏览 123回答 2
2回答

aluckdog

我不知道你的文件是如何命名的,它们是如何分布在不同文件夹中的,请尝试将它们的所有名称连同路径一起放在 Excel 工作表中的一列中,然后按照你对名称和邮件所做的方式遍历它们attachment = r'{}.csv'.format(filepaths from excel sheet)    with open(attachment, 'r') as my_attachment:       myfile = my_attachment.read()

慕工程0101907

下面是完整的代码。错误来了,因为缺少 PATH。win32com lib 需要完整路径,即使脚本在与附件相同的文件夹中运行也是如此。现在完美运行。:)import glob, asimport win32com.client as win32import pandas as pdfor 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python