首页 > 编程问答 >对于找到的每封唯一电子邮件,加载所有相关附件

对于找到的每封唯一电子邮件,加载所有相关附件

时间:2024-08-08 04:47:53浏览次数:14  
标签:python loops

我正在尝试自动创建包含与电子邮件关联的所有附件的电子邮件。我有一个 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()

此代码执行以下操作:

  1. 读取 CSV 数据: 它使用 csv 模块从的 CSV 文件中读取数据。
  2. 按电子邮件对附件进行分组: 它使用 defaultdict(list) 创建一个字典,其中每个电子邮件地址作为键,每个电子邮件的附件列表作为值。
  3. 循环浏览电子邮件和附件: 它循环浏览 email_attachments 字典,并在循环内执行以下操作:
    • 创建一个新的电子邮件项目。
    • 设置电子邮件的主题、正文和收件人。
    • 循环浏览与当前电子邮件关联的附件列表。
    • 使用 Attachments.Add() 方法将每个附件添加到电子邮件中。
    • 显示电子邮件(以便可以检查它并在需要时进行修改,然后再发送)。

这应该可以解决的问题,并允许根据需要为每封电子邮件发送正确的附件!

如果有任何其他问题,请告诉我。

标签:python,loops
From: 78845286

相关文章

  • Python & Selenium 4 & Edge 浏览器 |加载个人浏览器配置文件(包括cookie)
    使用Selenium4,我尝试加载我的个人浏览器配置文件(包括cookie),以便它可以加载到我之前登录过的网站。我正在使用边缘浏览器。在测试我的代码片段时,它似乎没有加载我的浏览器配置文件,而是创建一个新的(配置文件1)。我已确保配置文件的路径是正确的。我的代码片段:edge_opt......
  • 如何在通用 Python 类中输入 __eq__ ?
    当我定义带有泛型类型参数的类型时(例如K/V映射的键和值),我似乎无法编写合适的isinstance检查来实现__eq__:fromcollectionsimportOrderedDictfromcollections.abcimportMutableMappingfromtypingimportTypeVarK=TypeVar("K")......
  • 无法使用 devstack 安装 openstack 因为 python 版本
    我正在使用默认的python3.8.10运行./stack.sh,我收到此错误,因为我需要3.9或更高版本3.8msg错误但是当我将默认版本更改为3.9时,我收到错误没有找到模块“apt_pkg”3.9msgerror我一直在em之间来回跳动,但错误仍然存​​在(我也每次都会检查版本)......
  • Python @overload 使用联合类型会导致函数签名重叠错误
    我想编写以下重载的Python函数:fromtypingimportAny,TypeVar,overload_T1=TypeVar('_T1')_T2=TypeVar('_T2')_T3=TypeVar('_T3')@overloaddefparse_as(ty:type[_T1]|type[_T2],s:bytes)->_T1|_T2:...@overload......
  • python joblib.load 发生错误:协议 0 中的持久 ID 必须是 ASCII 字符串 在 GCP 云运行
    总体而言:我尝试使用Cloudbuild和Cloudrun构建BERT模型。我将模型(参数)和元数据(标签)保存在GCPCloudStorage中。但是,我遇到了通过joblib.load()加载metadata.bin文件的错误。我的metadata.bin文件包含UTF-8字符,但joblib.load需要ASCII字符。在......
  • Python + Svelte,如何使用本地文件系统
    总结一下,我有一个用python编写的应用程序。它在输入时需要一堆视频文件。使用一些魔法并生成合并的视频文件输出。我没有找到一个好的GUI解决方案(tkinter,QT,TUI等),所以我选择Svelte框架。但是出现了一个问题,我如何使用本地文件系统。在GUI(svelte)上,我必须上......
  • 如何在Python中绘制伪球面
    目标是使用meshgrid和numpy库生成伪球体的三维图形,但我使用下面的代码生成的图形不完整u=np.linspace(0,np.pi,50)v=np.linspace(0,2*np.pi,100)x,y=np.meshgrid(u,v)X=np.arccos(x)*np.cos(y)Y=np.arccos(x)*np.sin(y)Z=x-np.tan(x)fig=plt.f......
  • 18:Python集合属性
    #Python3集合#集合(set)是一个无序的不重复元素序列。#集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。#集合中元素必须是不可变类型,也就说里面不能是列表和字典#可以使用大括号{}创建集合,元素之间用逗号,分隔,或者也可以使用set()函数创建集合。s......
  • Python爬虫案例与实战:爬取源代码练习评测结果
    Python爬虫案例与实战:爬取源代码练习评测结果本章案例将介绍用Python编写程序实现简单网站的模拟登录,然后保持登录后的网页会话,并在会话中模拟网页表单提交,之后使用Requests库的高级特性爬取提交之后的返回结果。在HTTP网页中,如登录、提交和上传等操作一般通过向网页发送......
  • Python爬虫案例与实战:爬取豆瓣电影简介
    Python爬虫案例与实战:爬取豆瓣电影简介本章案例将介绍如何爬取豆瓣电影简介,以此帮助读者学习如何通过编写爬虫程序来批量地从互联网中获取信息。本案例中将借助两个第三方库----Requests库和BeautifulSoup库。通过Requests库获取相关的网页信息,通过BeautifulSoup库解析大......