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