1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用Python发送邮件(图片 表格 附件) 系列二: 同时发送图片和附件实际案例

使用Python发送邮件(图片 表格 附件) 系列二: 同时发送图片和附件实际案例

时间:2021-05-28 09:55:34

相关推荐

使用Python发送邮件(图片 表格 附件) 系列二: 同时发送图片和附件实际案例

本文是系列一的实际应用案例,同时发送图片和附件实际案例。

使用Python发送邮件(图片、表格、附件) 系列一:如何发送图片、表格等的全代码/u010652755/article/details/104321413

使用Python发送邮件(图片、表格、附件) 系列三:发送工作报表之透视表自动刷新数据/u010652755/article/details/104350889

# -*- coding: utf-8 -*-"""Created on Fri Feb 14 20:28:21 @author: xxx"""import osos.chdir(r'F:\自动化报表') # 设置文件路径import numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 画图时,中文字体和负号无法显示, 可按下面语句设置import matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi'] # 设置要使用字体mpl.rcParams['font.serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False # 使 - 号显示import smtplibfrom email.message import EmailMessagefrom email.header import Headerfrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipartfrom email.mime.application import MIMEApplication# Part 0 set initial parametermail_user = 'xxxxx'# 邮箱登录名,次处使用QQ邮箱,填写QQ号即可,不用带@mail_pass = 'abcdefghijk' # QQ邮箱授权码,可百度如何获取sender = 'xxxxx@' # 发件人receivers = ['abcxxx@', 'efgxxx@'] # 收件人列表,list形式chaosong = ['hijxx@'] # 抄送人列表,list形式# 设置邮件体对象msg = MIMEMultipart() # 邮件体对象,此处可加入参数, 具体可百度subject = 'python send email test'# 邮件主题msg['subject'] = Header(subject, 'utf-8') # 加入邮件主题msg['From'] = "{}".format(sender) # 加入邮件发送人msg['To'] = ",".join(receivers) # 加入邮件接收人msg['Cc'] = ",".join(chaosong) # 加入邮件抄送人,如无,可注释掉# 数据处理# 数据下载链接 /shuju/sjcs/sjxqpage.htmdf = pd.read_excel('社会消费品零售总额.xlsx', sheet_name = 'Sheet1')df['年'] = df['统计时间'].apply(lambda x: x[:5])# 图片df_x = np.arange(len(df)); df_real_x = df['统计时间']; df_y = df['社会消费品零售总额(亿元)']fig = plt.figure(figsize=(10,6))plt.plot(df_x, df_y , label="社会消费品零售总额(亿元)")xticks = np.arange(0,len(df_x)+1,11)xlabels = [df_real_x[x] for x in xticks[:-1]]+list(df_real_x)[-1:]plt.xticks(xticks, xlabels)plt.legend(loc = 'upper left')fig.autofmt_xdate()plt.savefig("data_image.jpg")# 表格df_count = df.groupby('年', as_index=False)['统计时间','社会消费品零售总额(亿元)'].agg({'统计时间':len, '社会消费品零售总额(亿元)':sum})df_count['统计时间'] = df_count['统计时间']+1df_count.rename(columns = {'统计时间':'统计总月份数', '社会消费品零售总额(亿元)':'每年零售总额(亿元)'}, inplace=True)# 网页内容,有链接,插入图片data_link = '/shuju/sjcs/sjxqpage.htm'htmlFile = """\<html><head></head><body><pre style="font-family:arial">Dears,以下是社会消费品零售总额数据,它指企业(单位、个体户)通过交易直接售给个人、社会集团非生产、非经营用的实物商品金额,以及提供餐饮服务所取得的收入金额。个人包括城乡居民和入境人员,社会集团包括机关、社会团体、部队、学校、企事业单位、居委会或村委会等。所用数据链接:<a href="{link}">{link}</a>.</pre><p>图1 社会消费品每月零售总额(亿元):<br /><img src="cid:0", width=720, height=420 ></p></body></html>""".format(link=data_link)htmlApart = MIMEText(htmlFile, 'html')# 在正文中显示图片imageFile = "data_image.jpg"imageApart = MIMEImage(open(imageFile, 'rb').read(), imageFile.split('.')[-1])imageApart.add_header('Content-ID', '<0>')msg.attach(imageApart)msg.attach(htmlApart)# 邮件正文中嵌入表格table_title = "表1 社会消费品每年零售总额(亿元)"def get_html_msg(df, table_title):"""1. 构造html信息"""df_html = df.to_html(escape=False)# 表格格式head = \"""<head><meta charset="utf-8"><STYLE TYPE="text/css" MEDIA=screen>table.dataframe {border-collapse: collapse;border: 2px solid #a19da2;/*默认居中auto显示整个表格*/margin: left;}table.dataframe thead {border: 2px solid #91c6e1;background: #f1f1f1;padding: 10px 10px 10px 10px;color: #333333;}table.dataframe tbody {border: 2px solid #91c6e1;padding: 10px 10px 10px 10px;}table.dataframe tr {}table.dataframe th {vertical-align: top;font-size: 14px;padding: 10px 10px 10px 10px;color: #105de3;font-family: arial;text-align: center;}table.dataframe td {text-align: left;padding: 10px 10px 10px 10px;}body {font-family: 宋体;}h1 {color: #5db446}div.header h2 {color: #0002e3;font-family: 黑体;}div.content h2 {text-align: center;font-size: 28px;text-shadow: 2px 2px 1px #de4040;color: #fff;font-weight: bold;background-color: #008eb7;line-height: 1.5;margin: 20px 0;box-shadow: 10px 10px 5px #888888;border-radius: 5px;}h3 {font-size: 22px;background-color: rgba(0, 2, 227, 0.71);text-shadow: 2px 2px 1px #de4040;color: rgba(239, 241, 234, 0.99);line-height: 1.5;}h4 {color: #e10092;font-family: 楷体;font-size: 20px;text-align: center;}td img {/*width: 60px;*/max-width: 300px;max-height: 300px;}</STYLE></head>"""# 构造正文表格body = \"""<body><div align="center" class="header"><!--标题部分的信息--><!--<h1 align="left">{table_title}</h1>--><p align="left">{table_title}</p></div><div class="content">{df_html}</div></body><br /><br />""".format(df_html=df_html, table_title=table_title)html_msg= "<html>" + head + body + "</html>"# 这里是将HTML文件输出,作为测试的时候,查看格式用的,正式脚本中可以注释掉# fout = open('test.html', 'w', encoding='UTF-8', newline='')# fout.write(html_msg)return html_msg# html 内容html_msg = get_html_msg(df_count, table_title)content_html = MIMEText(html_msg, "html", "utf-8")msg.attach(content_html)# 加入多个附件files = ['data_image.jpg', '社会消费品零售总额.xlsx' ]for i in np.arange(len(files)):attFile = MIMEApplication(open(files[i], 'rb').read())attFile.add_header('Content-Disposition', 'attachment', filename=files[i])msg.attach(attFile)# 发送邮件,参数设置sftp_obj = smtplib.SMTP_SSL(host='', port = 465)sftp_obj.login(mail_user, mail_pass)sftp_obj.sendmail(sender, receivers, msg.as_string())sftp_obj.quit()sftp_obj.close()print('\nThe email has been sent successfully')del msg

以下是测试结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。