Python 邮件发送:根据项目经理姓名和邮箱地址匹配子表并发送附件
Python 邮件发送:根据项目经理姓名和邮箱地址匹配子表并发送附件
本代码示例演示如何使用 Python 发送邮件,并根据项目经理姓名和邮箱地址匹配对应的子表作为附件,实现精准的邮件发送。
import os
import pandas as pd
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
subtables_path = r'C:\Users\LOH2HZ\Desktop\2023.6 email sending\SubTables' # 定义子表文件夹的路径
# 假设 df 是包含项目经理姓名和邮箱地址的 DataFrame
df = pd.DataFrame({'Project manager': ['John Doe', 'Jane Smith', 'Peter Pan'], 'Email address': ['john.doe@example.com', 'jane.smith@example.com', 'peter.pan@example.com']})
# 设置邮件发送者和接收者
sender = 'your_email@example.com'
receiverList = ['recipient_email@example.com'] # 接收者列表,可以根据需要添加更多
# 构建邮件内容
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ', '.join(receiverList)
msg['Subject'] = '项目进度更新'
body = '您好,请查收附件。'
msg.attach(MIMEText(body, 'plain'))
# 遍历 DataFrame 并发送邮件
for i, row in df.iterrows():
pm_name = row['Project manager']
pm_email = row['Email address']
if pd.isna(pm_name) or pd.isna(pm_email):
print(f'Missing information for row {i}')
continue
excel_path = os.path.join(subtables_path, f'{pm_name}.xlsx')
if os.path.exists(excel_path):
xlsxpart = MIMEBase('application', 'vnd.openxmlformats-officedocument.spreadsheetml.sheet')
xlsxpart.set_payload(open(excel_path, 'rb').read())
encoders.encode_base64(xlsxpart)
xlsxpart.add_header('Content-Disposition', 'attachment', filename=f'{pm_name}.xlsx')
msg.attach(xlsxpart)
# 发送邮件给该Project manager
smtpObj = smtplib.SMTP('smtp.example.com', 587) # 替换为您的 SMTP 服务器和端口
smtpObj.starttls()
smtpObj.login('your_email@example.com', 'your_password') # 替换为您的邮箱地址和密码
smtpObj.sendmail(sender, pm_email, msg.as_string())
smtpObj.quit()
else:
print(f'Subtable for {pm_name} not found')
# 发送完所有的邮件后关闭连接
# smtpObj.quit() # 如果您使用的是独立的 SMTP 连接,则在循环结束后需要关闭连接
解释:
-
导入必要的库:包括
os用于文件操作,pandas用于 DataFrame 操作,smtplib用于发送邮件,email库用于构建邮件内容。 -
设置子表文件夹路径:定义
subtables_path变量指向包含子表的文件夹。 -
读取 DataFrame:假设
df存储了项目经理姓名和邮箱地址,您可以根据实际情况替换数据源。 -
设置发送者和接收者:定义
sender变量为您的发送地址,receiverList为接收者列表。 -
构建邮件内容:使用
MIMEMultipart创建邮件对象,设置主题、内容以及附件。 -
遍历 DataFrame 并发送邮件:使用循环遍历 DataFrame 的每一行,提取项目经理姓名和邮箱地址,并根据姓名查找对应的子表文件。如果找到子表文件,则将其附加到邮件中并发送给该项目经理。
-
邮件发送和关闭连接:使用
smtplib创建 SMTP 连接,登录邮箱,发送邮件并关闭连接。
注意:
- 请根据您的实际情况修改 SMTP 服务器地址和端口、邮箱地址和密码以及附件文件的路径。
- 建议您使用独立的 SMTP 连接,并在发送完所有邮件后关闭连接以提高效率和安全性。
- 可以根据需要修改邮件主题、内容以及附件文件名。
希望这能帮助您实现根据项目经理姓名和邮箱地址匹配子表并发送附件的功能!
原文地址: https://www.cveoy.top/t/topic/oWmB 著作权归作者所有。请勿转载和采集!