Python 发送邮件并根据Excel表格内容附加对应附件
以下 Python 代码演示如何根据 Excel 表格中项目经理的姓名自动附加对应项目经理的表格作为邮件附件。
import os
import pandas as pd
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import smtplib
# 加载 Excel 文件数据
df = pd.read_excel('Project manager email address_test.xlsx')
receiverList = df['Email address'].astype(str).tolist() # 转换为字符串
cc = df['CC'].astype(str).tolist() # 转换为字符串
# 设置邮件信息
msg = MIMEMultipart()
msg['Subject'] = 'Open ProNovia E-mail reminder'
msg['From'] = sender
msg['To'] = ','.join(receiverList) # 需要以逗号分隔的字符串
msg['Cc'] = ','.join(cc)
receiverList.extend(cc) # 将抄送列表添加到收件人列表中
# 添加邮件内容
puretext = MIMEText(content, 'html', 'utf-8') # 纯 HTML
msg.attach(puretext)
# 遍历 Excel 文件中的每一行并附加对应子表格
for i, row in df.iterrows():
pm_name = row['Project manager name']
pm_email = row['Email address']
subtable_path = os.path.join('subtables', f'{pm_name}.xlsx')
if os.path.exists(subtable_path):
xlsxpart = MIMEApplication(open(subtable_path, 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=f'{pm_name}.xlsx')
msg.attach(xlsxpart)
else:
print(f'Subtable for {pm_name} not found')
# 发送邮件
smtpObj.sendmail(sender, receiverList, msg.as_string())
代码说明:
- 加载 Excel 文件数据: 使用
pd.read_excel()读取'Project manager email address_test.xlsx'文件,并将其存储在df数据框中。 - 设置邮件信息: 使用
MIMEMultipart()创建邮件对象,设置主题、发件人、收件人、抄送人等信息。 - 添加邮件内容: 使用
MIMEText()创建邮件内容对象,并将其附加到邮件对象中。 - 循环遍历 Excel 文件中的每一行: 使用
df.iterrows()遍历df数据框中的每一行。 - 获取项目经理姓名和子表格路径: 从当前行获取项目经理姓名和对应的子表格文件名,并使用
os.path.join()获取子表格的完整路径。 - 判断子表格是否存在: 使用
os.path.exists()检查子表格是否存在。如果存在,则使用MIMEApplication()创建附件对象,将子表格的内容读入并附加到邮件对象中。 - 发送邮件: 使用
smtpObj.sendmail()发送邮件。
注意:
- 请确保
'Project manager email address_test.xlsx'文件存在,并且该文件中的'Email address'列包含所有项目经理的电子邮件地址。 - 请确保
'subtables'文件夹存在,并且该文件夹包含所有项目经理的子表格文件,每个子表格文件的文件名应与项目经理姓名相同。 sender和smtpObj是邮件发送的配置信息,需要根据实际情况进行设置。- 代码中的
content是邮件内容的占位符,需要根据实际情况进行替换。
代码示例:
假设 'Project manager email address_test.xlsx' 文件内容如下:
| Project manager name | Email address | CC | |---|---|---| | John Doe | john.doe@example.com | jane.doe@example.com | | Jane Doe | jane.doe@example.com | john.doe@example.com |
并且 'subtables' 文件夹中存在两个文件:'John Doe.xlsx' 和 'Jane Doe.xlsx'。
运行代码后,将分别发送两封邮件给 John Doe 和 Jane Doe,并将他们对应的子表格文件作为附件发送。
总结:
通过使用 Python 代码,可以轻松实现根据 Excel 表格内容自动发送邮件并附加对应附件的功能,提高工作效率并避免人工操作的错误。
其他功能:
- 可以将代码封装成函数,方便重复使用。
- 可以根据需要添加其他功能,例如自定义邮件内容、添加邮件签名等。
相关资料:
希望以上内容对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/oTAp 著作权归作者所有。请勿转载和采集!