中国邮箱网讯 4月10日消息 工作中经常会出现需要将数据按一定的条件拆分并分发给不同的收件人的情况,今天就来给大家分享一下如何使用python拆分Excel表格并分发邮件。
以下表(2019年下半年销量数据表)数据为例:
首先我们需要一张包含收件人邮箱列表的Excel表格,具体数据如下图所示:
具体代码:
#导入模块
import pandas as pd
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.header import Header
import smtplib
#定义编写邮件函数
def create_email(email_from,email_to,email_subject,email_text,annex_path,annex_name):
#发件人,收件人,主题,正文,附件地址,附件名称
#创建一个带附件的实例
message=MIMEMultipart()
#生成发件人名称
message['From']=Header(email_from,'utf-8')
#生成收件人名称
message['to']=Header(email_to,'utf-8')
#生成邮件主题
message['Subject']=Header(email_subject,'utf-8')
#邮件正文内容
message.attach(MIMEText(email_text,'plain','utf-8'))
#构造附件
xlsxpart=MIMEApplication(open(annex_path, 'rb').read())
xlsxpart.add_header('Content-Disposition', 'attachment', filename=('gbk', '', annex_name))
#注意:此处annex_name要转换为gbk编码,否则中文会有乱码。
#将附件内容插入邮件中
message.attach(xlsxpart)
#返回邮件
return message
#定义发送邮件函数
def send_email(sender,password,receivers,msg):
#发件人邮箱,密码,收件人邮箱列表,邮件内容,发送邮件的函数
try:
#找到发件人邮箱的服务器地址,以加密形式发送 server=smtplib.SMTP_SSL("smtp.qq.com", 465)
#发件人邮箱服务器地址,端口(这是QQ邮箱的SMTP服务器地址和端口)
#server.ehlo()
#登录账号
server.login(sender,password)#发件人邮箱账号,密码
#发送邮件 server.sendmail(sender,receivers,msg.as_string())
print('邮件发送成功')
server.quit()#关闭连接
except Exception:
print(traceback.print_exce())
#读取收件人列表数据
data=pd.read_excel(r'.\收件人列表.xlsx',encoding='gbk')
#拆分工作簿数据
workbook_path=r".\2019年下半年销量数据表.xlsx"
split_column='省份'
file_path=r".\拆分数据\2019年下半年销量数据表"
#读取工作簿数据
df=pd.read_excel(workbook_path,encoding='gbk')
#将拆分列转化为列表
split_list=list(set(df[split_column]))
#拆分工作簿
for i in split_list:
dff=df[df[split_column]==i]
#拆分后文件的完整保存路径
filename=file_path+"——"+i+".xlsx"
#保存工作簿
dff.to_excel(filename,sheet_name=i,index=False)#i ndex=False忽略索引
print("工作簿拆分完成")
#发送邮件
for j in split_list:
my_email_from='XXXX'
my_email_to='拆分Excel表格并发送邮件'
my_email_subject=j+'2019年下半年销量数据表.xlsx'
my_email_text='Dear all,\n\t附件为2019年下半年销量数据表,请查收!'
my_annex_path=file_path+"——"+j+".xlsx"
my_annex_name=j+'2019年下半年销量数据表.xlsx'
#调用编写邮件函数
my_msg=create_email(my_email_from,my_email_to,my_email_subject,my_email_text,my_annex_path,my_annex_name)
my_sender='1049754823@qq.com'
my_password='usiaeeyfxceybaii'
my_receivers=list(data['收件人邮箱'][data['份']==j[0]
#调用发送邮件函数
send_email(my_sender,my_password,my_receivers,my_msg)
邮件发送效果如下:
注:使用第三方的SMTP服务发送邮件,需要先打开相应邮箱的SMTP服务,QQ邮箱配置方法如下图: