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

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

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

# -*- coding: utf-8 -*-
"""
Created on Fri Feb 14 20:28:21 2020@author: xxx
"""import os
os.chdir(r'F:\自动化报表') # 设置文件路径import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 画图时,中文字体和负号无法显示, 可按下面语句设置
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['KaiTi'] # 设置要使用字体
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False  # 使 - 号显示import smtplib
from email.message import EmailMessage
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication# Part 0 set initial parameter
mail_user = 'xxxxx'          # 邮箱登录名,次处使用QQ邮箱,填写QQ号即可,不用带@qq.com
mail_pass = 'abcdefghijk'    # QQ邮箱授权码,可百度如何获取sender    = 'xxxxx@qq.com'                       # 发件人
receivers = ['abcxxx@qq.com', 'efgxxx@126.com']  # 收件人列表,list形式
chaosong  = ['hijxx@qq.com']                     # 抄送人列表,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)              # 加入邮件抄送人,如无,可注释掉# 数据处理
# 数据下载链接 http://www.gov.cn/shuju/2017sjcs/sjxqpage.htm
df = 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['统计时间']+1
df_count.rename(columns = {'统计时间':'统计总月份数', '社会消费品零售总额(亿元)':'每年零售总额(亿元)'}, inplace=True)# 网页内容,有链接,插入图片
data_link = 'http://www.gov.cn/shuju/2017sjcs/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='smtp.qq.com', 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

以下是测试结果:

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

  1. 基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能

    NextQRCode ZXing开源库的精简版 **基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能 原文博客 附源码下载地址** 与原ZXingMini项目对比 N ...

  2. vue使用qrcodejs2生成带log的二维码图片,vue生成二维码图片中间带log,自定义log

    安装插件 npm install qrcodejs2 --save 在页面中引入 import QRcode from 'qrcodejs2' 普通的二维码 此处的id就是页面中要展示二维码容器的id ...

  3. Android批量图片载入经典系列——afinal框架实现图片的异步缓存载入

    一.问题描写叙述 在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存载入,接下来我们再介绍一下afinal 框架的使用. Afinal 是一个android的http框架.sql ...

  4. Kafka系列二——消息发送send方法源码分析

    文章目录 一.send使用说明 1.1 客户端代码 1.2 ProducerRecord 二.发送过程 2.1 send 2.2 doSend关键代码 2.2.1 RecordAccumulator原 ...

  5. 图片转为pdf怎么弄?发送图片安全高效的格式

    图片转为pdf怎么弄?pdf文档作为当下最火的一种文档格式之一,我们在日常生活中会经常使用到它.这种格式的文件保密性高,不易被修改.而将图片转换为pdf格式,不仅方便传输图片,而且还能最大程度保证图片 ...

  6. Python批量处理表格有用吗_python批量读入图片、处理并批量输出(可用于深度学习训练集的制作)...

    最近工作实在是太忙了,白浪花的项目没有及时跟进,很多知识也没有自学.好了,趁着现在等领导回复微信的时间,我把上周趁着零散时间做的工作总结一下.内容依然小白,但是却很重要. 项目情况简单描述一下,最终要 ...

  7. Python一看就懂系列(二)

    专栏: python轻奢入门系列 作者: 豆破苍琼 [输入和输出] 普通输出 生活中的输出 软件中的输出 python中的输出 格式化输出 什么是格式化 在程序中,看到了%这样的操作符,就是pytho ...

  8. opencv python教程简书_OpenCV-Python系列二:常用的图像属性

    对于图像,我们经常需要知道关于图像的特殊属性,比如宽度,高度,面积,像素点数目等等,那么在opencv-python中,这些信息如何获取呢? 本文结构: 1.基本图像属性 2. 对于opencv中的特 ...

  9. Python与Ansys apdl有限元系列二:矩阵位移法计算桁架结构

    矩阵位移法计算三种桁架(静定,一次,二次超静定) 1 为 了 便 于 计 算 , 桁 架 弹 性 模 量 与 截 面 积 乘 积 E A = 1 , 所 有 杆 件 均 为 二 力 杆 \qquad为 ...

  10. opencv+python实战日记 入门篇(二)调整图片的尺寸、裁剪图像

    目录 调整图片的尺寸 裁剪图像 调整图片的尺寸 打印出来的(496, 488, 3)表示的是图片的长宽,3表示的是RGB通道. import cv2 import numpy as npimg = c ...

最新文章

  1. 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数
  2. c语言实现将字符串首尾*删除,C语言实现Trim()函数:删除字符串首尾空格。...
  3. 修改登录密码html代码,修改密码.html · yuanxing_one/yuanxing - Gitee.com
  4. spring 学习—spring 的ioc底层原理(02)
  5. wpf treeView,避免横向滚动条自动偏移。 ContentHorizontalOffset
  6. 信息系统项目管理师-论文专题(四)进度管理论文写作
  7. 雷军反省今天的小米:无法躺赢或猛冲猛打,只能豁出去干
  8. Nginx服务器版本升级需求分析
  9. iOS开发常用的RGB色值和宏
  10. 交换机MAC地址学习和转发数据帧的原理
  11. 学习笔记之-------UIScrollView 基本用法 代理使用
  12. cycleGAN的整体架构+损失函数理解
  13. 【Python】随机种子 random/numpy/pytorch/pytorch.cuda
  14. 第二章 关键数据结构
  15. 关键信息基础设施网络风险地图
  16. Vue中data数据变化 -- 页面重新渲染的问题
  17. spss多元线性回归散点图_利用SPSS进行线性回归分析
  18. 计算机图形图像处理应用教程,计算机图形图像处理应用教程
  19. signature=ae0de8e34b6245c325b1b433d9eb5401,ELMA 德国艾尔玛,机械式增量型编码器, E27-0-21151 AL011...
  20. Unity 3D模型动画导出为帧序列

热门文章

  1. 根据地址获取经纬度 -- 腾讯地图(PHP后台)
  2. 【数据库 第n次与MySQL较劲】记录一个据说有初雪的夜晚的breakdown point
  3. 高中计算机应用面试教资真题,2019下半年高中信息技术教师资格证面试试题(精选)第四批...
  4. 国稻种芯绿色沃土计划 农业大健康-万祥军:对话化肥惹的祸?
  5. Environment 注入service 报错 null
  6. 公有云、私有云和混合云介绍
  7. 国足亚洲杯首败的背后:与韩国队只差一个孙兴民?
  8. 算法和数据结构(b站尚硅谷韩老师教程学习笔记)
  9. hadoop学习笔记7-Azkaban
  10. 用友u8 如何配置文件服务器,用友u8服务器软件配置