为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2023-06-06 16:10:11
我可以使用以下单个附件脚本向 outlook 上的不同收件人发送电子邮件,但是如果我尝试使用 for 循环向每个用户发送不同的附件,则会失败。目前该脚本正在使用attachment = r'C:\Users\roy\Royfile.csv'. 但我想要attachment = file,以便附件在每个 for 循环中针对不同的用户进行更改。这部分不起作用。不同用户的不同文件,示例Royfile.csv如下。但是还有 50 个这样的文件。Folder        FolderOwner    EmailAddress      AttachmentPathC:\folder1\   Roy            Roy@gmail.com     Royfile.csvD:\folder2\   Roy            Roy@gmail.com     Royfile.csv同一文件夹中的第二个文件Jackfile.csv:Folder        FolderOwner    EmailAddress      AttachmentPath  C:\folder3\   Jack            Jack@gmail.com   Jackfile.csvD:\folder4\   Jack            Jack@gmail.com   Jackfile.csv 例如第三个文件Mandyfile.csv。同样的方式,同一文件夹中的 50 个用户总共有 50 个文件。Folder        FolderOwner    EmailAddress        AttachmentPathC:\folder5\   Mandy            Mandy@gmail.com   Mandyfile.csvD:\folder6\   Mandy            Mandy@gmail.com   Mandyfile.csvPython脚本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']    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.csvRoyfile.csvJackfile.csvJackfile.csvMandyfile.csvMandyfile.csv......现在正在为附件 = ??? 所需要的东西而苦苦挣扎。这样每个文件都会发送给 50 个用户。
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

我不知道你的文件是如何命名的,它们是如何分布在不同文件夹中的,请尝试将它们的所有名称连同路径一起放在 Excel 工作表中的一列中,然后按照你对名称和邮件所做的方式遍历它们

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


查看完整回答
反对 回复 2023-06-06
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

下面是完整的代码。错误来了,因为缺少 PATH。win32com lib 需要完整路径,即使脚本在与附件相同的文件夹中运行也是如此。现在完美运行。:)


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


查看完整回答
反对 回复 2023-06-06
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信