Python 发送邮件附件,每个 Project Manager 只收到自己的子表
使用 Python 发送邮件附件,每个 Project Manager 只收到自己的子表
本文介绍如何使用 Python 发送邮件附件,并确保每个 Project Manager 只收到 SubTables 文件夹中以他们名字命名的子表。
代码如下:
import os
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import pandas as pd
import smtplib
subtables_path = r'C:\Users\LOH2HZ\Desktop\2023.6 email sending\SubTables' # 定义子表文件夹的路径
# 设置邮件服务器和发送者信息
server = 'smtp.example.com' # 替换为你的邮件服务器地址
sender = 'sender@example.com' # 替换为你的发送邮箱地址
password = 'your_password' # 替换为你的邮箱密码
# 创建邮件对象
msg = MIMEMultipart()
msg['Subject'] = 'Project Subtables'
msg['From'] = sender
# 打开 Excel 文件
df = pd.read_excel('your_excel_file.xlsx') # 替换为你的 Excel 文件路径
# 创建 SMTP 连接
smtpObj = smtplib.SMTP(server, 587) # 替换为你的 SMTP 端口号
smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login(sender, password)
# 遍历 Excel 文件的每一行
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 = MIMEApplication(open(excel_path, 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=f'{pm_name}.xlsx')
msg.attach(xlsxpart)
smtpObj.sendmail(sender, pm_email, msg.as_string()) # 发送邮件给该 Project manager
else:
print(f'Subtable for {pm_name} not found')
# 在每一次循环结束时清空附件列表,以便下一个 Project manager 只收到自己的子表
msg.set_payload([])
smtpObj.quit() # 发送完所有的邮件后关闭连接
代码解释:
- 导入库: 导入
os,email.mime.application,email.mime.multipart,email.mime.text,pandas和smtplib库,用于文件操作、邮件构建、数据处理和 SMTP 连接。 - 定义路径: 定义子表文件夹的路径
subtables_path。 - 设置邮件信息: 设置邮件服务器地址
server、发送者邮箱地址sender和密码password。 - 创建邮件对象: 创建邮件对象
msg,设置邮件主题、发送者地址。 - 打开 Excel 文件: 打开 Excel 文件
df,并使用pandas进行数据处理。 - 创建 SMTP 连接: 创建 SMTP 连接,设置服务器地址和端口号,并登录邮件服务器。
- 遍历 Excel 文件: 遍历 Excel 文件的每一行,获取每个 Project Manager 的姓名
pm_name和邮箱地址pm_email。 - 选择子表: 根据
pm_name选择相应的子表路径excel_path。 - 附件添加: 如果子表存在,将子表作为附件添加到邮件对象中。
- 发送邮件: 使用
smtpObj.sendmail()方法发送邮件。 - 清空附件列表: 在每次循环结束时,清空邮件对象中的附件列表
msg.set_payload([]),确保下一个 Project Manager 只收到自己的子表。 - 关闭连接: 发送完所有邮件后,关闭 SMTP 连接。
注意:
- 请根据实际情况修改代码中的路径、邮件服务器地址、邮箱地址和密码。
- 确保你的 Excel 文件中包含“Project manager”和“Email address”这两列。
- 请确保你的邮件服务器已开启 SMTP 服务。
使用示例:
假设你的 Excel 文件名为 'project_managers.xlsx',其中包含以下内容:
| Project manager | Email address | |---|---| | John Doe | john.doe@example.com | | Jane Smith | jane.smith@example.com |
并假设你的 SubTables 文件夹中包含以下子表:
- John Doe.xlsx
- Jane Smith.xlsx
运行代码后,John Doe 将收到包含 'John Doe.xlsx' 附件的邮件,Jane Smith 将收到包含 'Jane Smith.xlsx' 附件的邮件。
希望本文能帮助你实现使用 Python 发送邮件附件,并确保每个 Project Manager 只收到自己的子表的功能。
原文地址: https://www.cveoy.top/t/topic/oWq4 著作权归作者所有。请勿转载和采集!