【python】如何通过python来发邮件,各种发邮件方式详细解析

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建等分享。

所属的专栏:python基础语法,高阶实战应用教学

景天的主页:景天科技苑

文章目录

  • Python 发送邮件
    • 1.发送普通邮件
      • 1 需要有一个发送邮件的邮箱
      • 2 申请开启发送邮件
      • 3 写python代码,实现发送邮件(smtp模块--》python内置)
      • 4.发送邮件api详解
      • 5.发送普通邮件完整代码
    • 2.发送html格式邮件
    • 3 发送带附件邮件
    • 4.总结

Python 发送邮件

在日常工作中,我们可能经常会用到发送邮件,但如果每次都人工来发送,那岂不是很麻烦,今天我们就来讲解下如何通过python语言来优雅地发送邮件

1.发送普通邮件

1 需要有一个发送邮件的邮箱

  • 163,126,qq…
  • 今天咱们是以 qq 邮箱为例,其它大家自行尝试,都基本类似

2 申请开启发送邮件

  • 生成一个秘钥:x**************ic # 很重要,不要泄露

3 写python代码,实现发送邮件(smtp模块–》python内置)

  • 就使用我们的账号:31*******35@qq.com

以QQ邮箱为例,开启授权码图解,登录邮箱,点击设置
在这里插入图片描述

往下拉,找到pop3那一串,点击开启
在这里插入图片描述

点击管理服务,在弹出的页面生成授权码
在这里插入图片描述

点击生成授权码,然后需要扫码发短信同意授权,会生成一串字符串

4.发送邮件api详解

在Python3中,使用mimetext模块可以轻松地创建电子邮件消息。在发送电子邮件时,我们需要设置邮件的主题、收件人、发件人、正文和附件等信息。
而mimetext模块就是用来处理邮件中的文本和附件的。本文将详细介绍mimetext模块中的参数及其用法。

发邮件常见的几个类介绍

1.MIMEText类
MIMEText类用来创建邮件的正文,它有三个参数:

_text:邮件正文内容,可以是纯文本或HTML格式。

_subtype:邮件正文内容的类型,可以是"plain"(纯文本)、“html”(HTML格式)。

_charset:邮件正文内容的编码方式,常用的有"utf-8"、"gbk"等。

常见用法如下:

from email.mime.text import MIMEText# ----------方法1
msg = MIMEText('测试邮件。收到请不用回复', 'plain', 'utf-8')# -----------方法2
content = '''<p>我的地址:</p><p><a href='http://hldaig.xyz/'>点击进入我的</a></p><p>我的公众号二维码:</p><p><img src="cid:image"></p>'''
html = MIMEText(content, 'html', 'utf-8')

2.MIMEImage类
MIMEImage类用来创建邮件中的图片,它有两个参数:

_imagedata:图片的二进制数据。

_subtype:图片的类型,可以是"jpeg"、“gif”、"png"等。

代码示例

from email.mime.image import MIMEImage
#-----------方法1
with open('test.jpeg', 'rb') as f:image_data = f.read()
msg = MIMEImage(image_data, 'jpeg')
# ----------方法2
with open('test.gif', 'rb') as f:image_data = f.read()
msg = MIMEImage(image_data, 'gif')
# ---------方法3
with open('test.png', 'rb') as f:image_data = f.read()
msg = MIMEImage(image_data, 'png')

3.MIMEAudio类
MIMEAudio类用来创建邮件中的音频文件,它有两个参数:

_audiodata:音频文件的二进制数据。

_subtype:音频文件的类型,可以是"mp3"、"wav"等。

代码示例

from email.mime.audio import MIMEAudiowith open('test.mp3', 'rb') as f:audio_data = f.read()msg = MIMEAudio(audio_data, 'mp3')

4.MIMEBase类
MIMEBase类是所有MIME类型的基类,它有四个参数:

_maintype:MIME类型的大类,常见的有"text"、“image”、“audio”、“video”、"application"等。

_subtype:MIME类型的子类,如"text/plain"、“image/jpeg”、"audio/mp3"等。

_encoder:编码方式,可以是"base64"、"quoted-printable"等。

_payload:MIME类型的内容,可以是文本、图片、音频、视频等。

代码示例:

from email.mime.base import MIMEBasewith open('test.pdf', 'rb') as f:pdf_data = f.read()msg = MIMEBase('application', 'octet-stream')msg.set_payload(pdf_data)

5.发送普通邮件完整代码

# 1 导入模块
import smtplib
from email.mime.text import MIMEText  #往邮件中写内容的对象from email.utils import formataddr #发件人信息# 2 发送方和接收方配置
# 发件方邮箱:谁发送的
msg_from='3*****2@qq.com'
# 生成的授权码:不能泄露
password='h******ifj'
# # 发送给谁,可以写多个人,以列表形式存储
msg_to=['li*****91@126.com','18*******68@139.com']
# 邮件主题
subject = "给领导问好"  # 主题
content = "领导早上好,领导辛苦了" #邮件内容
# 生成一个MIMEText对象(还有一些其它参数)
msg = MIMEText(content)
# 放入邮件主题
msg['Subject'] = subject
# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,将收件人转化为以逗号分隔的字符串
msg['to'] = ','.join(msg_to)
try:# 通过ssl方式发送,服务器地址,端口s = smtplib.SMTP_SSL("smtp.qq.com", 465)# 登录到邮箱s.login(msg_from, password)# 发送邮件:发送方,收件方,要发送的消息s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个print('成功')
except BaseException as e:print(e)
finally:#不管是否发送成功,都退出服务s.quit()

登录邮箱查看,发送成功
在这里插入图片描述

2.发送html格式邮件

# 1 导入模块
import smtplib
from email.mime.text import MIMEText  #往邮件中写内容的对象from email.utils import formataddr #发件人信息# 2 发送方和接收方配置
# 发件方邮箱:谁发送的
msg_from='3******72@qq.com'
# 生成的授权码:不能泄露
password='h*********ifj'
# # 发送给谁,可以写多个人,以列表形式存储
msg_to=['li*******1@126.com','1**********8@139.com']
# 邮件主题
subject = "非常重要,中了五百万"  # 主题# 构建html标签
content = '''
<h1>恭喜您中奖了</h1>
<p><a href="https://www.baidu.com">点我兑换奖品</a></p>
'''# 生成一个MIMEText对象(发送html格式邮件)
msg = MIMEText(content,'html','utf-8')
# 放入邮件主题
msg['Subject'] = subject
# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,将收件人转化为以逗号分隔的字符串
msg['to'] = ','.join(msg_to)
try:# 通过ssl方式发送,服务器地址,端口s = smtplib.SMTP_SSL("smtp.qq.com", 465)# 登录到邮箱s.login(msg_from, password)# 发送邮件:发送方,收件方,要发送的消息s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个print('成功')
except BaseException as e:print(e)
finally:#不管是否发送成功,都退出服务s.quit()

邮箱查看,发送成功
在这里插入图片描述

3 发送带附件邮件

添加附件时需要使用MIMEMultipart类,它有一个attach()方法可以添加邮件中的附件。用smtplib模块发送示例代码:

# 1 导入模块
import smtplib
from email.mime.image import MIMEImage
from email.mime.text import MIMEText  #往邮件中写内容的对象from email.utils import formataddr #发件人信息from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBasefrom email import encoders# 2 发送方和接收方配置
# 发件方邮箱:谁发送的
msg_from='3*******2@qq.com'
# 生成的授权码:不能泄露
password='h**********fj'
# # 发送给谁,可以写多个人,以列表形式存储
msg_to=['li*********1@126.com','1*********8@139.com','3*********2@qq.com']
# 邮件主题
subject = "老板,这是今日日报,请查收"  # 主题# 创建一个带附件的实例
msg = MIMEMultipart()# 放入邮件主题
msg['Subject'] = subject
# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址
msg['From'] = formataddr(('景天',msg_from))
# 放入收件人,将收件人转化为以逗号分隔的字符串
msg['to'] = ','.join(msg_to)# 邮件正文内容
msg.attach(MIMEText('今日日报:1 xxx', 'plain', 'utf-8'))# 添加附件1
# 构造附件1,传送当前目录下的 ribao.txt 文件,注意文件要以rb的形式读取
file = open('ribao.txt', 'rb').read()
att1 = MIMEText(file, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1.add_header('Content-Disposition', 'attachment', filename="日报.txt")
msg.attach(att1)# 添加附件2--图片
with open('gzh.png', 'rb') as f:# 设置附件的MIME和文件名,这里是png类型:mime = MIMEBase('image', 'png', filename='gzh.png')# 加上必要的头信息:mime.add_header('Content-Disposition', 'attachment', filename='gzh.png')mime.add_header('Content-ID', '<0>')mime.add_header('X-Attachment-Id', '0')# 把附件的内容读进来:mime.set_payload(f.read())# 用Base64编码:encoders.encode_base64(mime)# 添加到MIMEMultipart:msg.attach(mime)# 构造附件3,图片格式
fp = open('对称加密.png', 'rb')
msgImage = MIMEImage(fp.read(),'png')
fp.close()# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
msgImage.add_header('Content-Disposition', 'attachment', filename="对称加密.png")
# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msg.attach(msgImage)try:# 通过ssl方式发送,服务器地址,端口s = smtplib.SMTP_SSL("smtp.qq.com", 465)# 登录到邮箱s.login(msg_from, password)# 发送邮件:发送方,收件方,要发送的消息s.sendmail(msg_from, msg_to, msg.as_string()) #第二个参数可以以列表的方式写多个print('成功')
except BaseException as e:print(e)
finally:#不管是否发送成功,都退出服务s.quit()

在这里插入图片描述

查看邮件中,已包含附件

在这里插入图片描述

4.总结

综上,就是我们通过python来发送邮件的常用方法的详细流程,我们也可以结合linux定时任务,或者celery来实现定时发送,也不难。上述代码在使用时可以直接拿去用,只需要改下自己邮箱的参数即可,是不是很方便,喜欢的朋友一键三连,python常规用法持续更新中!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQ技术选型

消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合、异步消息、流量削锋等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构&#xff0c;是大型分布式系统不可缺少的中间件。 RabbitMQ 特点&#xff1a; RabbitMQ 相当轻量级的消息队列&#xff…

英伟达一系列高质量公开课来了!

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 英伟达免费提供许多自学课程&#xff0c;评价肥肠高&#xff0c;有专为初学者设计的也有更进阶的内容&#xff08;提供证书&#xff09;&#xff0c;若实验室/单位基于NVIDIA Jetson进行开发&#xff…

正则表达式大全,30个正则表达式详细案例

正则表达式在中是非常强大的工具&#xff0c;以下是正则表达式的30个使用案例&#xff1a; 1. 查找以特定字符开始的数据: SELECT * FROM table WHERE column REGEXP ^a; 2. 查找以特定字符结束的数据: SELECT * FROM table WHERE column REGEXP a$; …

Junit 更多-ApiHug准备-测试篇-010

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 如果大家…

VisualGLM-6B的部署步骤

对于如下命令&#xff0c;你将完全删除环境和环境中的所有软件包 conda remove -n env_name --all 一、VisualGLM-6B环境安装 1、硬件配置 操作系统&#xff1a;Ubuntu_64&#xff08;ubuntu22.04.3&#xff09; GPU&#xff1a;4050 显存&#xff1a;16G 2、配置环境 建…

授人以渔 选购篇九:扫地机器人(扫拖机器人)选购要点

文章目录 系列文章自动上下水导航技术&#xff1a;立体激光导航视觉导航&#xff0c;多传感器清洁能力&#xff1a;胶条刷、旋转拖布健康卫生&#xff1a;热水洗拖布、热风烘干智能功能品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&…

2024华中杯C题光纤传感器平面曲线重建原创论文分享

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了2024华中杯数学建模C题的完整论文啦。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 14 2.3问题三 14 三、模型假设 15 四、…

HWOD:字符串字符匹配

一、知识点 c语言中&#xff0c;判断一个字符串中是否含有某字符是很容易的&#xff0c;不需要知道字符串的长度 i0; while(c ! str[i] && str[i] ! \0){ i; } if(str[i] \0){ return false; } return true; 二、题目 1、描述 判断短字符串S中的所有字符…

闭包的概念总结与分析

1 定义 闭包又称词法闭包 闭包最早定义为一种包含和的实体. 在计算机科学中&#xff0c;闭包&#xff08;英语&#xff1a;Closure&#xff09;&#xff0c;又称词法闭包&#xff08;Lexical Closure&#xff09;或函数闭包&#xff08;function closures&#xff09;&#…

Redis: 在项目中的应用

文章目录 一、Redis的共享session应用二、分布式缓存1、缓存2、缓存一致性问题解决方案&#xff08;缓存更新策略&#xff09;&#xff08;1&#xff09;作用&#xff08;2&#xff09;三种策略&#xff08;3&#xff09;主动更新策略&#xff08;数据库、缓存不一致解决方案&a…

JavaScript系列:实用的数组比较方法

目录 引用比较的局限性 使用JSON.stringify()方法比较 使用Array.every()方法进行比较 结论 在JavaScript编程中&#xff0c;经常会遇到需要比较两个数组是否相等的场景。但是&#xff0c;由于JavaScript中数组是以引用方式比较&#xff0c;而非值比较&#xff0c;这使得直…

一切皆因数据

大语言模型在自然语言处理&#xff08;NLP&#xff09;领域取得突破性进展的原因&#xff1a;总体上&#xff0c;基本上都与数据集有关&#xff0c;庞大数据集带来巨大的挑战。可以说&#xff0c;数据的量的变化&#xff0c;带来的深度学习的质的飞跃。挑战与收益是并存的&…

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧&#xff0c;新车型研发项目的进度管理成为车企赢得市场的关键。然而&#xff0c;由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点&#xff0c;项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

Element-UI el-autocomplete带输入建议的输入框组件

文章目录 一、背景二、使用示例三、自定义使用四、全文本模糊匹配一、背景 当我们使用 el-select 可以下拉框搜索选择想要选中的值,但是却不能编辑选中的文本;使用 el-input 可以编辑文本,却没有建议可以选择。 为兼容二者的优点,可以使用 el-autocomplete,el-autocompl…

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从) 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包(所有节点执行)2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则(可选)2.5 验证 NFS 服务器三、搭建部署mysql主节点3.1 创建命名空间3.2…

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0…

软考-系统集成项目管理中级--项目质量管理(输入输出很重要!!!本章占分较高,着重复习)

本章历年考题分值统计 本章重点常考知识点汇总清单 5、成本效益分析法:对每个质量活动进行成本效益分析&#xff0c;就是要比较其可能的成本与预期的效益。达到质量要求的主要效益包括减少返工、提高生产率、降低成本、提升干系人满意度及提升赢利能力。(掌握)17下64考题 本章…

贪吃蛇项目实战解析

项目实战 游戏背景​ 贪吃蛇是久负盛名的游戏&#xff0c;它也和俄罗斯方块&#xff0c;扫雷等游戏位列经典游戏的行列。 在编程语言的教学中&#xff0c;我们以贪吃蛇为例&#xff0c;从设计到代码实现来提升学生的编程能力和逻辑能力。 目录&#xff1a; 游戏背景 游戏效…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架&#xff0c;它以使用简单、节省内存著称。在解析Excel时&#xff0c;EasyExcel没有将文件数据一次性全部加载到内存中&…

【Flutter】自动生成图片资源索引插件二:FlutterAssetsGenerator

介绍 FlutterAssetsGenerator 插件 &#xff1a;没乱码&#xff0c;生成的图片索引命名是小驼峰 目录 介绍一、安装二、使用 一、安装 1.安装FlutterAssetsGenerator 插件 生成的资源索引类可以修改名字&#xff0c;我这里改成R 2. 根目录下创建assets/images 3. 点击image…