我正在尝试自动创建包含与电子邮件关联的所有附件的电子邮件。我有一个 Excel 文档,正在引用电子邮件和附件。
index = 0
counter = 0
for email in emails:
mailItem = olApp.CreateItem(0)
mailItem.Subject =
mailItem.BodyFormat = 1
mailItem.Body =
mailItem.To = email
counter = counter + 1
for attachment in attachments:
mailItem.Attachments.Add(attachment)
index+=1
mailItem.Display()
counter+=1
电子邮件 | 附件 |
---|---|
电子邮件 1 | 附件 A |
电子邮件 1 | 附件 B |
电子邮件 2|| |attach C | email 3 |
attach D | 我认为 while 或 if 语句可能是答案,但我似乎无法让它发挥作用。我知道上面列出的代码将为我提供四封电子邮件,但它在循环访问每个电子邮件地址时包含所有附件。我希望它做的是提供三个电子邮件地址,第一个仅包含附件 A 和 B。电子邮件 2 仅包含附件 C,电子邮件 3 仅包含附件 D。 |
I thought that a while or if statement might be the answer but I can't seem to get it to work. I know that the code listed above will provide me four emails but it includes all attachments when it cycles through each of the email addresses. What I would like it to do is provide three email addresses with the first only including attach A and B. Email 2 only including attach C and Email 3 only including attach D.
是对的,while 或 if 语句可以解决此问题!需要做的是一种方法来对的 Excel 数据进行分组,以便循环可以知道哪些附件与哪些电子邮件相关联。
以下是如何使用 Python 完成此操作的方法,假设的 Excel 数据存储在名为“emails_and_attachments.xlsx”的 CSV 文件中,格式如下:
Email,Attachment
[email protected],Attachment A
[email protected],Attachment B
[email protected],Attachment C
[email protected],Attachment D
import csv
from collections import defaultdict
# 使用 defaultdict 按电子邮件对附件进行分组
email_attachments = defaultdict(list)
with open('emails_and_attachments.xlsx', 'r') as file:
reader = csv.reader(file)
next(reader) # 跳过标题行
for row in reader:
email, attachment = row
email_attachments[email].append(attachment)
# 现在,循环浏览每个电子邮件及其附件,并创建电子邮件
import win32com.client
olApp = win32com.client.Dispatch("Outlook.Application")
for email, attachments in email_attachments.items():
mailItem = olApp.CreateItem(0)
mailItem.Subject = "查看的附件"
mailItem.BodyFormat = 1
mailItem.Body = "请在下面找到的附件。"
mailItem.To = email
for attachment in attachments:
mailItem.Attachments.Add(attachment)
mailItem.Display()
此代码执行以下操作:
-
读取 CSV 数据:
它使用
csv
模块从的 CSV 文件中读取数据。 -
按电子邮件对附件进行分组:
它使用
defaultdict(list)
创建一个字典,其中每个电子邮件地址作为键,每个电子邮件的附件列表作为值。 -
循环浏览电子邮件和附件:
它循环浏览
email_attachments
字典,并在循环内执行以下操作:- 创建一个新的电子邮件项目。
- 设置电子邮件的主题、正文和收件人。
- 循环浏览与当前电子邮件关联的附件列表。
-
使用
Attachments.Add()
方法将每个附件添加到电子邮件中。 - 显示电子邮件(以便可以检查它并在需要时进行修改,然后再发送)。
这应该可以解决的问题,并允许根据需要为每封电子邮件发送正确的附件!
如果有任何其他问题,请告诉我。
标签:python,loops From: 78845286