使用Python,SMTP发邮件到qq邮箱(文本/超链接/图片/表格/附件表格)

这篇博客将介绍如何利用SMTP,使用Python向qq邮箱自动发邮件,包括正文文本+超链接+图片+表格,附件图片+表格,收件人可多个,分隔

1. 效果图

正文文本+超链接+图片+表格,效果图如下:

正文表格,附件图片+表格,效果图如下:

2. 源码

# -*- coding: utf-8 -*-
# 利用SMTP,向qq邮箱发送邮件,包括正文文本+图片+表格,附件图片+表格;
# python sendMailDf.pyimport numpy as np
import pandas as pd
import 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 smtplib
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# 设置初始化参数
mail_user = '139xxxxx'  # 邮箱登录名,此处使用QQ邮箱,填写QQ号即可,不用带@qq.com
mail_pass = 'anbudddddee'  # QQ邮箱授权码sender = '139xxxxx@qq.com'  # 发件人
receivers = ['139xxxxx@qq.com']  # 收件人列表,list形式
chaosong = ['139xxxxx@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)  # 加入邮件抄送人,如无,可注释掉# 数据处理
ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))
ts = ts.cumsum()
ts.plot()
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=["A", "B", "C", "D"]
)
df = df.cumsum()
plt.figure()
df.plot()
plt.legend(loc='upper left')
plt.savefig("data_image.jpg")# 表格
df_count = pd.read_excel("foo.xlsx", "Sheet1", index_col=None, na_values=["NA"])# 网页内容,有链接,插入图片
data_link = 'http://www.gov.cn/shuju/2017sjcs/sjxqpage.htm'
htmlFile = """\
<html><head></head><body><pre style="font-family:arial">Dears,以下是foo数据,它指企业(单位、个体户)通过交易直接售给个人、社会集团非生产、非经营用的实物商品金额,以及提供餐饮服务所取得的收入金额。个人包括城乡居民和入境人员,社会集团包括机关、社会团体、部队、学校、企事业单位、居委会或村委会等。所用数据链接:<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 = "ym.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', 'foo.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

参考

  • https://blog.csdn.net/songszp/article/details/126316900
  • Python3实现发送qq邮件、发送图片、表格、附件等
  • https://blog.csdn.net/m0_46388544/article/details/125031024

使用Python,SMTP发邮件到qq邮箱(文本/超链接/图片/表格/附件表格)相关推荐

  1. Python smtp发邮件提示错误554, b'DT:SPM 163 smtp1

    使用163邮箱的SMTP服务,发送到QQ邮箱时出现错误: 注意,你是用的password应该是授权码不是你的邮箱登陆密码. 授权码可以在你开通SMTP服务的时候得到. 554错误汇总: •554 DT ...

  2. Python利用SMTP/IMTP制作简单邮件(QQ邮箱)发送程序(保姆级)

    先看效果图和代码 效果图 import smtplib from email.mime.text import MIMEText # 邮件正文 from email.header import Hea ...

  3. php使用qq发邮件怎么发,php 发送QQ邮箱邮件

    这是我的源码比较简陋 https://www.lanzous.com/i2l7h8f 感谢 https://www.cnblogs.com/woider/p/6980456.html 下载phpmai ...

  4. python发送邮件 python发送qq,163,sohu, xinlang, 126等邮件 python自动发邮件总结及实例说明...

    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...

  5. 如何用python自动发邮件_Python | 解放双手,用Python实现自动发送邮件

    解放双手,用Python实现自动发送邮件 使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,节省非常多的时间. Python有两个内置库:smtplib和email,能够实现邮件功能, ...

  6. python--smtplib加email发邮件给指定邮箱(一)

    python--smtplib加email发邮件给指定邮箱(一) 前言: 1.模块详解 2.授权码获取 2.2 如何获取授权码 2.2.1 设置 2.2.1 选择账户 2.2.1 打开SMTP服务 3 ...

  7. 用python写用手机发邮件_如何用python写发邮件?

    原标题:如何用python写发邮件? 1. 163邮箱 163邮箱需要设置客户端授权密码 请输入图片描述 # coding:utf-8 from email.header import Header ...

  8. linux如何写邮件到QQ邮箱

    linux如何写邮件到QQ邮箱 作为一名运维人,肯定不会,也不想7*24h待在电脑旁,观察服务器的情况. 要做一名高级运维,必会脚本. [注:]模拟场景:当剩余可用内存不足时,linux服务器会自动发 ...

  9. linux如何发邮件到外部邮箱

    linux如何发邮件到外部邮箱 使用linux时,有时我们想发邮件给朋友或同事,可不可以通过命令行直接发呢? 想通过linux监控网站或者系统状况并自动报警,如何使用脚本发出邮件给外部邮箱呢? 不需要 ...

  10. java 发送激活邮件 以qq邮箱为例

    java发送激活邮件 以qq邮箱为例 1.首先发送者邮箱需要开启服务 登录qq邮箱,选择设置--账号,开启以上两个服务.会获得相应的两个授权码 2.以下代码为发送邮件代码 package com.em ...

最新文章

  1. Boosting和Bagging: 如何开发一个鲁棒的机器学习算法
  2. PHP超链接传数据库值格式,php – 使用超链接更新数据库
  3. 个人支付源码_[5G时代投资风口源码修复版] 投资区块链+订制UI完美版+对接免签支付+自带发圈推广任务奖励+视频教程...
  4. 微课|中学生可以这样学Python(8.4节):递归算法例题讲解1
  5. Android单元测试(五):依赖注入,将mock方便的用起来
  6. Office 365 online的基本概念
  7. Hive报错java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory
  8. 数值分析(9)-最小二乘法
  9. 分布式ID生成器解决方案
  10. 音频信号频率测试软件,音频测试信号频率详细解说
  11. UCGUI的消息处理
  12. android表情转码,UCS-4 android/ios微信emoji表情转码
  13. Arduino IDE+_Attiny13/85实践(三) Lilypad Attiny85编程
  14. mac os监听扬声器、麦克风的音量、静音
  15. C语言:二维数组及其定义
  16. Mozilla里永久删除的邮件如何恢复
  17. 微信小程序wx:key使用
  18. python画地图经纬度_如何用python画地图上的标注线?
  19. Android实现语音发送播放功能以及示例代码
  20. 租用gpu训练神经网络(矩池云)

热门文章

  1. BTA12A-ASEMI的IGBT管BTA12A
  2. 私有云 公有云 社区云 混合云 专有云
  3. 这名程序猿吐了一管口水,便迎来了人生的四大暴击…
  4. 如何判断网线连接状态
  5. C语言之根据摄氏温度求华氏温度
  6. Python爬取中国票房网所有电影片名和演员名字,爬取齐鲁网大陆所有电视剧名称...
  7. 获取中国票房网的五年间年度票房的数据信息(初学者完整代码)
  8. 可汗学院公开课:统计学笔记——基础知识、二项及泊松分布 、大数定律、正态分布
  9. 重装系统后如何恢复mysql服务
  10. 浅谈TPM设备管理系统、推行要素和目的