问题描述
我可以使用单个脚本的以下脚本向Outlook上的不同收件人发送电子邮件,但是如果我尝试使用for循环向每个用户发送不同的附件,则失败。
当前脚本正在使用attachment = r'C:\Users\roy\Royfile.csv'
。但是我想要attachment = file
,以便附件在每个for循环中针对不同的用户而更改。这部分不起作用。
不同用户的文件不同,例如下面的Royfile.csv
。但是还有50个这样的文件。
Folder FolderOwner EmailAddress AttachmentPath
C:\folder1\ Roy [email protected] Royfile.csv
D:\folder2\ Roy [email protected] Royfile.csv
Folder FolderOwner EmailAddress AttachmentPath
C:\folder3\ Jack [email protected] Jackfile.csv
D:\folder4\ Jack [email protected] Jackfile.csv
第3个文件,例如Mandyfile.csv
。同样,同一文件夹中的50个用户总共可以存储50个文件。
Folder FolderOwner EmailAddress AttachmentPath
C:\folder5\ Mandy [email protected] Mandyfile.csv
D:\folder6\ Mandy [email protected] 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工作表中的一栏中,然后按照您对名称和邮件的处理方式对其进行迭代>
attachment = r'{}.csv'.format(filepaths from excel sheet)
with open(attachment,'r') as my_attachment:
myfile = my_attachment.read()
,
终于找到了我的问题的答案,下面是完整的代码。 由于缺少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