当前位置: 首页 > news >正文

用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. 连接服务器

  2. 登录服务器

  3. 发送邮件

  4. 退出服务器

第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定义网格 在父元素加上&#xff…...

《扬帆优配》环境更优!这类资金,迎利好!

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

RK3568平台开发系列讲解(内存篇)内存管理的相关结构体

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

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...