用Python发送电子邮件?这也太丝滑了吧(21)
小朋友们好,大朋友们好!
我是猫妹,一名爱上Python编程的小学生。
欢迎和猫妹一起,趣味学Python。
今日主题
猫爸赚钱养家,细想起来真的不容易啊!
起早贪黑,都是6点早起做早饭,送我到学校后,匆匆忙忙去上班,下班忙起来时也不得不披星戴月。
有句话咋说的?
起得比鸡早,睡得比狗晚。
世人慌慌张张,不过图碎银几两,偏偏这碎银几两,能解世间惆怅。
可让父母晚年安康,呵护幼子成长入学堂。
他的工资条长这样:
猫爸自己也常常纳闷,工资条是通过邮件发送的,里面有文字和图片。
如果不小心发错怎么办?
比如把张三的工资条贴到了李四的邮件里。
这应该是程序实现的发送邮件吧?
我猜是,你呢?
咱们今天的主题就是如何用Python发送邮件,完全可以实现类似效果。
电子邮件email
电子邮件又叫email,它是一种用电子手段提供信息交换的通信方式。
通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。
电子邮件可以是文字、图像、声音等多种形式。
同时,用户可以得到大量免费的新闻、专题邮件,并轻松实现轻松的信息搜索。
咱们今天实现以下三个功能:
-
发送纯文本格式邮件
-
发送HTML格式邮件
-
发送带附件的邮件
在学习之前,需要准备两个邮箱。
这两个电子邮箱,不要属于同一家邮件服务商。
比如(和猫妹学Python)准备一个QQ邮箱、一个163邮箱。
163邮箱设置
对于163电子邮箱,需要设置客户端授权密码,不然邮件会发送失败。
具体看以下截图,如果版本有差异,操作方式也是类似的。
开启IMAP/SMTP服务
开启POP3/SMTP服务
什么是SMTP
SMTP,Simple Mail Transfer Protocol,简单邮件传输协议,一种提供可靠且有效的电子邮件传输的协议。
SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
我们不需要了解SMTP具体实现,只要会使用它就可以了。
毕竟,我们目标不是开发一套电子邮件系统,而是如果用Python来发送邮件。
smtplib
Python之所以强大,之所以被称为胶水语言。
就是因为它有许多现成的模块,可以拿来就用,简单,高效。
Python提供了smtplib模块,可以用它来发邮件。
一般需要四个步骤:
-
连接服务器
-
登录服务器
-
发送邮件
-
退出服务器
第1步
smtplib.SMTP创建一个SMTP对象。
host是服务器主机IP或域名,port是端口号。
每个公司的邮件服务商和端口号都可以不同,可以在网上查询下。
smtplib.SMTP可以用smtplib.SMTP_SSL替换。
smtplib.SMTP,非SSL端口,不加密。
smtplib.SMTP_SSL,SSL端口,加密。
建议使用smtplib.SMTP_SSL,更加安全。
smtp.ehlo()表示向服务器进行反馈,反馈成功后就表示可以登录服务器了。
第2步
登录服务器
smtp.login(sender, pwd)
sender就是登录邮箱名
pwd就是密码
第3步
发送邮件
smtp.sendmail(sender, receiver, message)
sender表示发送者的邮箱
receiver表示接收者的邮箱
message邮件内容
第4步
退出服务器
smtp.quit()
发送纯文本格式邮件
代码和效果如下图:
1~3:导入smtplib模块,并引入MIMEText和Header。
这两个类是用来构建邮件内容的。
它们都属于email模块。
要想用Python发邮件,需要用到stmplib模块和email模块。
stmplib用来发送邮件。
email用来构建邮件内容。
6~7:输入邮箱账户名和密码,这里的密码不是邮件的密码,而是授权密码,当在设置smtp时会看到。
10:接收邮件的邮箱地址,它是列表,如果同时发送多个人,这里可以多设置几个地址。
11~14:填充邮件内容。
MIMEText一共有三个参数:
-
邮件正文,如果内容较多,可以多行。
-
邮件类型,plain表示纯文本。
-
邮件编码,一般是utf-8。
17~24:采用try except实现异常处理,如果有报错,网上搜索下原因。
发送HTML格式邮件
万事开头难,有了发送纯文本邮件的经验。
再发送HTML格式邮件,就简单多了。
格式:
message=MIMEText("正文内容","html","utf-8")
发送带附件的邮件
如果想要在邮件中添加附件怎么办?
带附件的邮=邮件正文+各个附件
邮件正文使用的是MIMEText,附件呢?
一般使用的是MIMEApplication对象,然后再使用一个MIMEMultipart对象把两个对象包含进去就可以了。
MIMEMultipart=MIMEText+MIMEApplication
还记得我们之前学习的文件操作吗?
文件分为文本文件和二进制文件。
那么附件有没有类型呢?
有的,也分为文本类型和其他类型。
文本类型附件语法
message=MIMEMultipart()实例化一个MIMEMultipart对象。
MIMEText()实例化一个MIMEText对象,三个参数含义为读取文件内容、网络传输编码方式、unicode编码方式。
open这句代码表示打开文件并读取文件,rb表示二进制模式打开一个只读文件。
它等同于下面两句代码:
file=open(r"文件路径","rb")
txt=file.read()
atta["Content-Tpye"]和atta["Content-Disposition"]是固定的,暂时不需要关心其具体含义。
只需要知道,这两句代码等同于如下:
atta.add_header("Content-Type", "application/octet-stream")
atta.add_header("Content-Disposition", "attachment; filename='文件名'")
message.attach(atta)表示把上述附件添加到邮件附件中。
如果附件中有中文,可能有乱码。
atta.add_header("Content-Disposition", "attachment", filename=("test"))
可以改为
atta.add_header("Content-Disposition", "attachment", filename=("gbk","","test"))
文本类型附件语法
当附件为其他类型(如pdf、xlsx、zip、mp3等)时,我们需要用到email模块的两个类:MIMEMultipart类和MIMEApplication类。
语法:
MIMEApplication用于实例化一个MIMEApplication对象,有一个参数,用于读取文件内容。
atta.add_header()表示调用MIMEApplication对象的add_header方法。
最后,使用MIMEMultipart对象的attach将附件添加到MIMEApplication对象中。
为什么用编程方式发送邮件
如果要发100封邮件怎么办?
编程可以批量、高效,你觉得呢?
好了,我们今天就学到这里吧!
如果遇到什么问题,咱们多多交流,共同解决。
我是猫妹,咱们下次见!
相关文章:

用Python发送电子邮件?这也太丝滑了吧(21)
小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 欢迎和猫妹一起,趣味学Python。 今日主题 猫爸赚钱养家,细想起来真的不容易啊! 起早贪黑,都是6点早起做早饭,送…...

分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测
分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测 目录分类预测 | MATLAB实现CNN-GRU-Attention多输入分类预测分类效果模型描述程序设计参考资料分类效果 模型描述 Matlab实现CNN-GRU-Attention多变量分类预测 1.data为数据集,格式为excel,12个输…...

C++提高编程(1)
C提高编程1.模板1.1模板的概念1.2函数模板1.2.1函数模板语法1.2.2函数模板注意事项1.2.3函数模板案例1.2.4普通函数与函数模板的区别1.2.5普通函数与函数模板的调用规则1.2.6模板的局限性1.3类模板1.3.1类模板语法1.3.2类模板和函数模板区别1.3.3类模板中成员函数创建时机1.3.4…...
day26 回溯算法的部分总结
回溯算法的部分总结 回溯算法是一种常用于解决排列组合问题、搜索问题的算法,它的基本思想是将问题的解空间转化为一棵树,通过深度优先搜索的方式遍历树上的所有节点,找到符合条件的解。回溯算法通常使用递归实现,每次递归时传入…...

带你玩转Python爬虫(胆小者勿进)千万别做坏事·······
这节课很危险,哈哈哈哈,逗你们玩的 目录 写在前面 1 了解robots.txt 1.1 基础理解 1.2 使用robots.txt 2 Cookie 2.1 两种cookie处理方式 3 常用爬虫方法 3.1 bs4 3.1.1 基础介绍 3.1.2 bs4使用 3.1.2 使用例子 3.2 xpath 3.2.1 xpath基础介…...

【JavaScript 】严格模式,With关键字,测试框架介绍,assert
❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录静态类型语言弱类型严格模式将过失错误转化为异常简化变量的使用With测试框架try-catch选择性捕获…...
mybatis实现一个简单的CRUD功能的小案例(后端)编写流程
下面是一个使用mybatis实现增删改查功能的示例程序: 1.创建一个数据库 首先需要创建一个名为test_db的数据库,里面包含一个名为user_info的表,其中包含id、name、age三个字段。 2.配置mybatis 在项目的pom.xml文件中添加mybatis和mysql依…...

腾讯云轻量应用服务器价格表(2023版)
2023腾讯云轻量应用服务器2核2G4M带宽88元一年、2核4G6M带宽159元/年、4核8G10M优惠价425元、8核16G14M价格1249、16核32G20M服务器2499元一年,今天分享2023腾讯云服务器配置及精准报价。 腾讯云轻量应用服务器优惠价格表 腾讯云服务器分为轻量应用服务器和云服务器…...

网络层IP协议和数据链路层
目录IP协议协议头格式分片网段划分特殊的IP地址IP地址的数量限制NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器私有IP地址和公网IP地址路由路由表生成算法数据链路层认识以太网以太网帧格式认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MT…...
零基础学习Java 03
目录 数组 动态初始化数组 静态初始化 数组的应用 数组两种典型的异常 length关键字求出数组的长度 数组遍历在IDEA中输出快捷语句 对象数组 数组的遍历:foreach方法 二维数组 枚举(enum) 数组 1在方法中可以返回一个数组,但是在定义方法时类型要…...
PG数据库超时退出 TCP设定
数据库在使用psql工具以及jdbc进行远程连接时,在经过一定时间之后报错-致命错误: terminating connection due to client no input timeout。 排查安全参数,hg_clientnoinput 0; 问题原因 操作系统TCP相关参数设置不正确&…...

每日学术速递4.4
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.Baize: An Open-Source Chat Model with Parameter-Efficient Tuning on Self-Chat Data 标题:Baize:一种对自聊天数据进行参数高效调优的开源聊天模型 作者…...

ChatGPT将引发大量而普遍的网络安全隐患
ChatGPT是一个基于人工智能的语言生成模型,它可以在任何给定的时间,使用自然语言生成技术,生成文本、对话和文章。它不仅可以被用来编写文本,还可以用来编写语言、生成图像和视频。目前, ChatGPT已广泛应用于语言翻译、…...

购买学生护眼台灯几瓦最好?有哪些推荐护眼灯
现今的近视已然成为普遍现象,而且有往低年龄段发展的趋势。究其原因,长期使用电子设备是一方面,还是就是我们日常工作、学习、生活没有很好的护眼环境,很多时候我们不经意的错误习惯,久而久之就有可能诱发近视。对孩子…...

什么是 SYN 攻击?如何避免 SYN 攻击?
SYN 攻击方式最直接的表现就会把 TCP 半连接队列打满,这样当 TCP 半连接队列满了,后续再在收到 SYN 报文就会丢弃,导致客户端无法和服务端建立连接。 避免 SYN 攻击方式,可以有以下四种方法: 调大 netdev_max_backlo…...
数据分析练习——学习一般分析步骤
目录 一、准备工作 二、导入库和数据 1、导入必要的库: 2、模拟数据 三、数据分析过程 1、读取数据: 2、数据概览和描述性统计: 2.1、查看数据概览: 2.2、查看描述性统计: 3、数据清洗: 3.1、处…...
Linux环境下挂载exfat格式U盘,以及安装exfat文件系统
目录Linux一般支持的文件系统有:1.安装exfat软件安装工具环境以及exfat件依赖的系统软件下载exfat源码包并安装2.挂载exfat格式U盘查看U盘在那个目录执行挂载命令Linux一般支持的文件系统有: 文件系统名称详情ext专门为Linux核心做的第一个文件系统&…...

网格布局grid
grid网格定义 css网格是一个用于web的二维(行和列的组合)布局,利用网格,你可以把内容按照行和列的格式进行排版,另外,可以轻松的实现复杂布局。 1.定义网格和fr单位 1.1定义网格 在父元素加上ÿ…...

《扬帆优配》环境更优!这类资金,迎利好!
近来,第一批主板注册制新股连续发动申购,网下询价中,组织出资者频繁现身打新商场,公募基金、社保基金、养老金、保险资金等中长时间资金,成为全面注册制下新股发行商场的重要参加者。 多位业内人士对此表明,…...

RK3568平台开发系列讲解(内存篇)内存管理的相关结构体
🚀返回专栏总目录 文章目录 一、硬件架构二、Linux 物理内存管理结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 📢应用程序想要使用内存,必须得先找操作系统申请,我们有必要先了解一下 Linux 内核怎么来管理内存,这样再去分析应用程序的内存管理细节的时候,…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...