【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 MIMEAudio

with 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 MIMEBase

with 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 MIMEBase


from 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.mfbz.cn/a/559273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

27 管道

概念 管道式Unix中最古老的进程间通信的形式 把从一个进程连接到另一个进程的一个数据流称为一个“管道” 原理 task_struct中保存了一个files的结构体数组&#xff0c;里面存储了所有打开文件的编号&#xff0c;新打开一个文件&#xff0c;数据会写入到文件对应的 缓冲区中去…

程序,进程,进程管理的相关命令

程序 程序是执行特定任务的代码 1.是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 2.用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 进程的状态 为了对进程进行管理&#xff0c;操作系统首先定义…

上位机图像处理和嵌入式模块部署(树莓派4b实现xmlrpc通信)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面&#xff0c;我们也用纯API实现过上位机和开发板之间的通信。当时使用的方法&#xff0c;就是用windows自带的网络sdk和linux自带的api函数来完…

rc_visard 3D Stereo Senso

1 简介 rc_visard 3D立体视觉传感器 支持的接口标准 GenICam Generic Interface for CamerasGigE Gigabit Ethernet 词汇表 SGM semi-global matching 半全局匹配 SLAM Simultaneous Localization and Mapping 即时定位与地图构建 2 安全 3 硬件规格 坐标系 rc_visar…

linux信号相关概念

signal 信号引入什么是信号&#xff1f;如何产生信号&#xff1f;通过按键产生信号调用系统函数向进程发信号系统调用函数发送信号的流程: 由软件条件产生信号软件发送信号的流程&#xff1a; 硬件异常产生信号硬件异常的流程&#xff1a; Deliver、Pending、Block概念信号在内…

【Ne4j图数据库入门笔记1】图形数据建模初识

1.1 图形建模指南 图形数据建模是用户将任意域描述为节点的连接图以及与属性和标签关系的过程。Neo4j 图数据模型旨在以 Cypher 查询的形式回答问题&#xff0c;并通过组织图数据库的数据结构来解决业务和技术问题。 1.1.1 图形数据模型介绍 图形数据模型通常被称为对白板友…

明文scheme拉起此小程序

微信开发文档说明&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/url-scheme.html 1、开发者无需调用平台接口&#xff0c;在MP平台->设置->隐私与安全->明文Scheme拉起此小程序声明后&#xff0c;可自行根据如下格式拼接app…

【静态分析】软件分析课程实验A1-活跃变量分析和迭代求解器

1 作业导览 为 Java 实现一个活跃变量分析&#xff08;Live Variable Analysis&#xff09;。实现一个通用的迭代求解器&#xff08;Iterative Solver&#xff09;&#xff0c;用于求解数据流分析问题&#xff0c;也就是本次作业中的活跃变量分析。 Live Variable Analysis 详…

facenet人脸检测+人脸识别+性别识别+表情识别+年龄识别的C++部署

文章目录 一. 人脸检测二.人脸识别facenet2.1 训练人脸识别模型2.2 导出ONNX2.3 测试 三.人脸属性&#xff08;性别、年龄、表情、是否戴口罩&#xff09;3.1 训练3.2 导出ONNX3.3 测试 四. 集成应用五、Jetson 部署5.1 NX5.2 NANO 一. 人脸检测 代码位置&#xff1a;1.detect …

深入理解数据结构第五弹——排序(2)——快速排序

排序&#xff08;1&#xff09;&#xff1a;深入了解数据结构第四弹——排序&#xff08;1&#xff09;——插入排序和希尔排序-CSDN博客 前言&#xff1a; 在前面我们已经讲过了几种排序方式&#xff0c;他们的效率有快有慢&#xff0c;今天我们来学习一种非常高效的排序方式…

【windows-搭建Ubuntu22LTS】

一、环境要求 1. windows版本要求 至少Windows 10 2020年5月(2004) 版, Windows 10 2019年5月(1903) 版&#xff0c;或者 Windows 10 2019年11月(1909) 版 2. 控制面板开启相关的程序(需要重启) 二、Microsoft store安装unbuntu 下载后直接运行&#xff08;稍微等会&#…

Linux软件安装和部署Java代码

文章目录 1.软件安装1.1.软件安装方式1.2.常用软件安装1.2.1 安装jdk1.2.2 安装Tomcat1.2.3 安装MySQL1.2.4 安装lrzsz 2.项目部署2.1.手工部署项目2.2 通过Shell脚本自动部署项目 1.软件安装 1.1.软件安装方式 &#xff08;1&#xff09;二进制发布包安装&#xff1a; 软件已…

基于SSM的学校在线考试系统的设计与实现

功能需求 管理员模块 管理员模块是整个学校在线考试系统中最为重要的管理者&#xff0c;能够对网站内的各种信息进行管理&#xff0c;能够对教师、学生的个人资料进行管理&#xff0c;对于已经离校的学生将其剔除考试名单&#xff0c;将新入校的学生纳入到考试名单中。对于入…

用 element ui 实现季度选择器

由于在数据项目中经常以各种时间条件查询数据&#xff0c;所以时间选择器&#xff08;DatePicker&#xff09;组件是很常用的组件。但是在我使用的 Element UI 中&#xff0c;缺少了季度选择器的功能。 简易实现 一开始我根据时间范围使用 select 去遍历,如 2024-Q1、2023-Q4…

win/mac达芬奇19下载:DaVinci Resolve Studio 19

DaVinci Resolve Studio 19 是一款功能强大的视频编辑和调色软件&#xff0c;广泛应用于电影、电视和网络节目的后期制作。这款软件不仅提供了专业的剪辑、调色和音频处理工具&#xff0c;还引入了全新的DaVinci Neural Engine AI工具&#xff0c;对100多项功能进行了大规模升级…

美化博客文章(持续更新)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;游戏实现&#xff1a;贪吃蛇​​​​​​ &#x1f337;追光的人&#xff0c;终会万丈光芒 前言&#xff1a; 该文提供我的一些文章设计的一些方法 目录 1.应用超链接 1.应用超链接

差速机器人模型LQR 控制仿真——路径模拟

LQR路径跟踪要求路径中带角度&#xff0c;即坐标&#xff08;x,y,yaw&#xff09;&#xff0c;而一般我们的规划出来的路径不带角度。这里通过总结相关方法&#xff0c;并提供一个案例。 将点路径拟合成一条完整的线路径算法 将点路径拟合成一条完整的线路径是一个常见的问题…

【Java开发指南 | 第十五篇】Java Character 类、String 类

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 Java Character 类转义序列 Java String 类连接字符串 Java Character 类 Character 类是 Java 中用来表示字符的包装类&#xff0c;它提供了一系列静态方法用于对字符进行操作&#xff0c;其主要分为静态方法…

06 JavaScript学习:语句

JavaScript 语句是用来执行特定任务或操作的一组指令。它可以包括变量声明、条件语句、循环语句、函数调用等。JavaScript 语句以分号结尾&#xff0c;每个语句都会被解释器执行。 分号 ; 在JavaScript中&#xff0c;分号&#xff08;;&#xff09;用于表示语句的结束。尽管在…

python爬虫-----深入了解 requests 库(第二十五天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…