用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封邮件怎么办?

编程可以批量、高效,你觉得呢?

好了,我们今天就学到这里吧!

如果遇到什么问题,咱们多多交流,共同解决。

我是猫妹,咱们下次见!

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

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

相关文章

Autodesk AutoCAD 2023(CAD设计软件)自动化工具介绍以及图文安装教程

Autodesk AutoCAD是一款功能强大的计算机辅助设计软件,主要用于2D和3D设计、制图和草图。它适用于多种行业,包括建筑、土木工程、机械工程、电气工程等等。 Autodesk AutoCAD具有2D和3D设计、多种工具和功能、可扩展性、与其他Autodesk软件集成和多平台…

记录一次解决Maven问题的坑

记录一次解决Maven问题的坑目录概述需求:设计思路实现思路分析1.一步步的解决问题比较方法2.后来感觉和这个没关系3.最后查询资料拓展实现性能参数测试:参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfec…

python get方法及常用的代码

1.首先,我们需要下载一个 Python的 pygame库。 2.接着,我们需要在 Pygame中去注册一个自己的账户。 3.登录成功后,我们就可以去下载 pygame中的文件了。 4.我们现在只需要将下载文件放入到 Pygame库中即可,这就完成了下载&#xf…

算法学习day43

算法学习day431. 力扣1049. 最后一块石头的重量 II1.1 分析1.2 代码2. 力扣494. 目标和2.1 分析2.2 代码3. 力扣474.一和零3.1 分析3.2 代码4.参考资料1. 力扣1049. 最后一块石头的重量 II 1.1 分析 动规五部曲: 1.确定dp数组以及下标的含义 dp[j]表示容量为j的背…

第⑦讲:Ceph集群RGW对象存储核心概念及部署使用

文章目录1.RadosGW对象存储核心概念1.1.什么是RadosGW对象存储1.2.RGW对象存储架构1.3.RGW对象存储的特点1.4.对象存储中Bucket的特性1.4.不同接口类型的对象存储访问对比2.在集群中部署RadosGW对象存储组件2.1.部署RGW组件2.2.集群中部署完RGW组件后观察集群的信息状态2.3.修改…

剑指offer JZ27 二叉树的镜像

Java JZ27 二叉树的镜像 文章目录Java JZ27 二叉树的镜像一、题目描述二、辅助栈三、递归法使用辅助栈和递归法解决剑指offer JZ27 二叉树的镜像的问题。 一、题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。   数据范围:二叉树的节点数 0≤n≤…

--编写一个存储过程,输入一个日期,返回该日期与当下日期的时间差,如果该差是负的,则提示该日期已经过去XX天,不然提示距离该日期还有xx天

--创建存储过程&#xff0c;一个输入参数&#xff0c;一个输出参数 create or replace procedure sp_minus(i_date varchar2,o_minus out varchar2) is --声明一个变量&#xff0c;用来存放异常 v_errm varchar2(200); begin --判断输入格式 if length(i_date)<>8 th…

Redis主从复制

文章目录定义用途怎么使用案例演示三大命令&#xff1a;修改配置文件细节常见方式一主二仆薪火相传反客为主复制原理和工作流程主从复制的缺点定义 主从复制&#xff0c;master以写为主&#xff0c;slave以读为主&#xff0c;当master数据变化的时候&#xff0c;自动将新的数据…

十分钟搞懂Java限流及常见方案

目录限流基本概念QPS和连接数控制传输速率黑白名单分布式环境限流方案常用算法令牌桶算法漏桶算法滑动窗口常用的限流方案Nginx限流中间件限流限流组件合法性验证限流Guawa限流网关层限流从架构维度考虑限流设计限流基本概念 QPS和连接数控制 传输速率 黑白名单 分布式环境…

HTML5 <abbr> 标签 和 HTML5 <applet> 标签

标签定义及使用说明 <abbr> 标签用来表示一个缩写词或者首字母缩略词&#xff0c;如"WWW"或者"NATO"。 通过对缩写词语进行标记&#xff0c;您就能够为浏览器、拼写检查程序、翻译系统以及搜索引擎分度器提供有用的信息。 实例 被标记的缩写词如…

《程序员面试金典(第6版)》面试题 08.04. 幂集(回溯算法,位运算,C++)不断更新

题目描述 幂集。编写一种方法&#xff0c;返回某集合的所有子集。集合中不包含重复的元素。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入&#xff1a; nums [1,2,3] 输出&#xff1a; [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ] 解题思路与代码 其实…

博客让谷歌或是百度收录

参考以下大佬的博客教程 Hexo框架(六)&#xff1a;SEO优化及站点被搜索引擎收录设置 | 你真是一个美好的人类 第一步 安装百度和 Google 的站点地图生成插件&#xff1a; npm install hexo-generator-baidu-sitemap --save npm install hexo-generator-sitemap --save 然后来…

文件或目录损坏且无法读取错误的恢复方法

我们在日常的生活当中经常都会遇到各种各样的问题。比如有些时候将磁盘插入电脑之后突然跳出来一个“磁盘结构损坏且无法读取”的提示框&#xff0c;那么像这个情况该怎么解决呢?别着急&#xff0c;小编现在就将磁盘结构损坏且无法读取这个问题的解决方法来分享给你们 文件或目…

数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)

目录 用队列实现栈 题目描述 题目示例 核心思路 解题过程 定义结构体 创建栈结构体函数 入栈函数 出栈函数 取栈顶数据函数 判断栈是否为空函数 销毁栈函数 完整题解&#xff08;C语言&#xff09; 用栈实现队列 题目描述 题目示例 核心思路 完整题解…

计算机网络管理 ARP 地址解析协议 ARP的基础原理 Wireshark ARP 报文分析 ARP的通信过程

⬜⬜⬜ ---&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;---⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &#x1f381;欢迎各位→…

GPT4和ChatGPT的区别,太让人震撼

文 | Serendipity知乎 前言 GPT4上午朋友圈已经刷屏啦&#xff0c;不过我还在忙&#xff0c;刚刚才登上 GPT-4 &#xff0c;现在来体验一下~ 附 GPT-4 能力测试站&#xff08;无需魔法&#xff0c;仅供国内研究测试&#xff09;&#xff1a; https://gpt4test.com 附 Cha…

解决代码重复的优化方案

上周公司组织培训Spring 基于注解的数据校验方案&#xff0c;可以节省很大工作量&#xff0c;其实&#xff0c;除了数据校验&#xff0c;还有很多其他方案&#xff0c;可以大幅提高代码的整洁性。如&#xff1a;设计模式、OOP 思想、反射、泛型等等&#xff0c;框架往往需要以同…

强化学习下的多教师知识蒸馏模型(学习笔记

对知识蒸馏的方法提出了一个新的方向 采用多个不同的教师模型同时训练一个学生模型 一个很明显的好处 就是 多个教师model可以减少单个教师模型它的bias 但是当我们有多个老师的时候&#xff0c; 学生模型是否能够根据自己的能力选择和结合教师模型的特点 来选择性的向老师…

Maven依赖管理

文章目录一、mvn依赖的特性1. 依赖的范围2. 依赖的传递3. 依赖的排除二、mvn中的继承和聚合1. 聚合2. 继承3. Demo1、首先创建一个父工程并且修改它的打包方式为 pom2、创建子模块工程3、依赖管理三、企业级知识扩展1. 属性2. 版本管理3. 资源配置4. 多环境开发配置Maven工程约…

SWAT模型(高阶)

SWAT模型高阶十七项案例分析实践应用 导师&#xff1a;刘老师【副教授】&#xff1a;来自国内双一流高校&#xff0c;长期从事数字流域建模、流域水土过程模拟、遥感及GIS技术应用等领域工作&#xff0c;发表多篇SCI论文暨完成多项科研项目&#xff0c;具有资深的技术底蕴和专…