python自动发送邮件(html、附件等),qq邮箱和网易邮箱发送和回复
在python中,我们可以用程序来实现向别人的邮箱自动发送一封邮件,甚至可以定时,如每天8点钟准时给某人发送一封邮件。今天,我们就来学习一下,如何向qq邮箱,网易邮箱等发送邮件。
一、获取邮箱的SMTP授权码。
1、要发送邮件,首先要获取对应邮箱的SMTP授权码,有了这个SMTP授权码才能发送邮件。
以qq邮箱为例:
1)首先登录主页,在主页上面,点击设置,点击账户。

2)在账户页面一直往下拉,找到如下图所示位置。

3) 点击POP3/SMTP服务中的开启按钮。点击开启后,会有一个手机验证,把需要发送的内容发送到指定号码,然后点击“我已发送”按钮。

4)之后会自动跳出一个框,里面就包含着SMTP授权码,把它复制下来,储存到一个地方方便以后调用

5)同理,你要给网易邮箱发送邮件的话,你也要登录网易邮箱,然后获取SMTP授权码。

二、编写发送代码
1、首先安装邮件发送的库smtplib
2、引入邮件发送的库
import smtplib#引入控制邮箱发送邮件的库
from email.mime.text import MIMEText
3、新建邮件对象,填入邮件的正文内容和发件人、收件人等信息。
#1.邮件正文内容
msg = MIMEText('测试邮件正文内容')user ='你自己的qq号@qq.com' #发件人邮箱
pwd = '你自己的SMTP授权码' #邮箱的SMTP授权码
to = '你自己设置的收件人邮箱'#收件人,可以写多个收件人,用英文逗号隔开#2.设置邮件主题、发件人、收件人
msg[ 'Subject' ] ='测试邮件主题!'#邮件的标题
msg[ 'From ' ] = user#设置发件人
msg['To'] = to#设置收件人
其中要在pwd变量中输入你第一步得到的SMTP授权码。然后要设置发件人,也就是你自己的邮箱,还有就是收件人的邮箱,收件人的邮箱可以是多个,多个之间用英文的逗号隔开即可。
4、调用qq邮箱服务,登录邮箱,发送邮件
#3.发送邮件
s = smtplib.SMTP_SSL ('smtp.qq.com', 465)#选择qq邮箱服务,默认端口为465
s.login(user, pwd)#登录qq邮箱
s.send_message(msg)#发送邮件
s.quit()#退出邮箱服务
print( ' Success! ')
其中smtp.qq.com为qq邮箱服务名,465为邮箱端口号,这对于qq邮箱是固定的,不可修改。
如果是网易邮箱,则使用smtp.163.com,端口号还是465
5、测试发送文件。发送成功!!!
三、发送HTML邮件
有的情况下,我们需要发送html格式的邮件,那么我们应该怎么做呢?
关键点就是新建邮件对象时,指定邮件的格式为html:
mail_msg = '''
<p>这个是一个常规段落</p>
p><a href="https : / /www.baidu.com">这是一个包含链接的段落</a></p>
'''
msg = MIMEText(mail_msg, 'html' , 'utf-8')
其中,mail_msg就是我们的html格式的邮件内容,然后把之前的msg = MIMEText('测试邮件正文内容')增加两个参数,一个参数指定格式为html,另一个参数指定编码方式为utf-8 。
其它代码和普通邮件发送的代码一样。
四、发送邮件附件
有时我们需要在发送邮件正文内容的同时附上邮件附件,而如果想实现自动发送邮件附件,我们需要将之前的代码做些修改。
1、引入MIMEMultipart功能,并且创建一个可以同时添加正文和附件的MIMEMultipart()对象,并把它赋值给msg变量
from email.mime.multipart import MIMEMultipart
msg =MIMEMultipart()
2、将前面html格式的邮件正文mail_msg的内容添加到msg中
#先添加正文内容
msg.attach(MIMEText(mail_msg, 'html' , 'utf-8' ))
3、然后在将附件添加到msg中
#再添加附件,这里的文件名可以有中文,但下面第三行的filename不可以为中文
attl = MIMEText(open( 'E:\\test.docx', 'rb' ) .read(), 'base64' , 'utf-8')
attl["Content-Type"] = 'application/octet-stream'
#下面的filename是在邮件中显示的名字及后缀名,名字可以不同,但不可以为中文!!
att1["Content-Disposition"] = 'attachment; filename="test.docx" '
msg.attach(att1)
在写文件路径的时候,最好还是用两个反斜杠来防止单个斜杠导致的特殊含义,这里的文件路径可以写成中文内容,因为这里设置了utf-8编码。
注意:如果有的时候显示文件路径报错,那么把里面大写的字母换成小写即可,这个是个经验手段,仅在这里适用。
filename里不可以写中文,否则会报错!
4、后面发送的代码都是和之前一样的。
五、定时发送邮件
可以用以下两种方式实现定时发送。
1、通过while True实现定时任务:
把发送邮件的代码放到一个函数中,然后在while中定时调用这个函数实现定时发送。
import timewhile True:send_email()time.sleep(86400)
一天是86400秒,所以使用time每休息一天就调用一次发送邮件的代码,需要定义一个叫send_email 的函数,把之前发送邮件的代码,放在该函数中。
2、通过schedule库实现定时任务。
1)安装schedule库:pip install schedule
2)每天8:00定时调用发送邮件的函数
import schedule
schedule.every().day.at( "8:00" ).do(send_email)
while True:schedule.run_pending()time.sleep ( 10)
schedule定义了每天8:00调用一次send_email函数,at后的括号里是具体的时间,do后的括号里是需要执行的函数。其作用是将该任务放入定时计划中,如果要实现每天都执行,还需要加一个while循环,schedule.run_pending()的含义为运行所有可以运行的schedule任务,time.sleep(10)是让schedule任务运行完休息10秒钟再检测是否有可以运行的任务。
六、自动回复邮件
在收到别人的邮件后,我们可以设置一个自动回复功能,通常用来通知对方,邮件已经收到了,作为一个友好的反馈。邮件自动回复的这个功能不需要程序来实现,一般的邮箱都自带这个功能,比如qq邮箱的话,打开设置,常规设置:

下拉到假期自动回复的设置那里:
点击启用选项,然后输入自动回复的内容,在下面不要选仅对联系人中的邮件地址进行回复。最后在左下角保存更改即可:
这样,不管谁给你发送邮件,都可以自动回复他了。
相关文章:
python自动发送邮件(html、附件等),qq邮箱和网易邮箱发送和回复
在python中,我们可以用程序来实现向别人的邮箱自动发送一封邮件,甚至可以定时,如每天8点钟准时给某人发送一封邮件。今天,我们就来学习一下,如何向qq邮箱,网易邮箱等发送邮件。 一、获取邮箱的SMTP授权码。…...
数学-快速幂
从一个简单的问题说起: 给出整数m,n和p,要求计算(m ^ n) % p的结果。 #include <iostream> using namespace std;int main() {long long m, n, p;cin >> m >> n >> p;long long ans 1;for (long long i 0; i < …...
DevEco鸿蒙应用开发-第一个App
目录下载开发环境创建工程登录华为账户测试应用下载开发环境 前往官网下载 DevEco 开发环境:https://developer.harmonyos.com/cn/develop/deveco-studio#download 下载并安装,请记住你选择的 IDE 与 SDK 安装位置,后续可能会用到ÿ…...
又一款全新的基于 GPT4 的 Python 神器Cursor,关键还免费
chartgpt大火之后,随之而来的就是一大类衍生物了。 然后,今天要给大家介绍的是一款基于GPT4的新一代辅助编程神器——Cursor。 它最值得介绍的地方在于它免费,我们可以直接利用它来辅助我们编程,真正做到事半功倍。 注意&#…...
CSS的浮动(下)
🌟所属专栏:前端只因变凤凰之路🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新前端的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简…...
软件测试-性能测试流程
压测任务具体包含: 0.前期准备 尽量参与业务需求评审,可以对业务有更深入的了解,了解哪些功能是核心功能,哪些可能存在性能瓶颈,以便在性能需求评审的时候能给出有建设性的意见 1.性能需求分析、评审 明确测试范围(哪些业务接口)、目标(tps、rt、成功率) 关于性能需…...
【python实操】年轻人,别用记事本保存数据了,试试数据库吧
为什么用数据库? 数据库比记事本强在哪? 答案很明显,你的文件很多时候都只能被一个人打开,不能被重复打开。当有几百万数据的时候,你如何去查询操作数据,速度上要快,看起来要清晰直接 数据库比我…...
铁威马NAS教程之利用docker快速搭建个人在线书库
这是一个基于Calibre的简单的图书管理系统,支持在线阅读。主要特点是:美观的界面、支持多用户、支持在线阅读、支持邮件推送、支持OPDS、支持一键安装,网页版初始化配置,轻松启动网站等等。 那么,如何利用docker快速搭…...
504. 七进制数——【Leetcode每日一题】
504. 七进制数 给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。 示例 1: 输入: num 100 输出: “202” 示例 2: 输入: num -7 输出: “-10” 提示: −107<num<107-10^7 < num < 10^7−107<num<107 思路&…...
RocketMQ源码(24)—DefaultMQPushConsumer延迟消息源码
基于RocketMQ release-4.9.3,深入的介绍了DefaultMQPushConsumer延迟消息源码。 文章目录1 load加载延迟消息数据1.1 parseDelayLevel解析延迟等级2 start启动调度消息服务3 DeliverDelayedMessageTimerTask投递延迟消息任务3.1 executeOnTimeup执行延迟消息投递3.2…...
计算机视觉知识点(一)——交并比(IoU)及其若干改进
交并比(IoU)前言IoU公式及示意图IoU Loss缺点GIoU Loss公式及示意图缺点DIoU公式及示意图CIoU前言 目标检测是一个常见的计算机视觉任务,在目标检测任务中,交并比作为评判检测框的标准具有很重要的意义,在实际的应用中…...
一篇文章教你从零到一搭建自动化测试框架(附视频教程+源码)
目录 前言 1. 什么是自动化测试框架? 2. 没有万能的测试框架,适合自己项目的,能提高工作效率的就是好框架。 3. 设计框架的思路: 4.如何开展自动化测试 前言 关于测试框架的好处,比如快速回归提高测试效率&#x…...
【备战蓝桥杯】----01背包问题(动态规划)
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...
Golang1.18新特性介绍——泛型
社区长期高呼的泛型特性在Golang 1.18中终于正式发布,Go泛型实现与传统的C有较大差异,更像Rust的泛型实现。本文详细介绍Golang泛型及其特性,包括泛型语法、类型参数、类型约束、类型近似以及constraints包提供内置类型等。 最近写Dao代码&am…...
【SpringBoot17】SpringBoot中使用Quartz管理定时任务
定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的 Token 信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的时候&…...
杨辉三角形 (蓝桥杯) JAVA
目录题目描述:暴力破解(四成):二分法破解(满分):题目描述: 下面的图形是著名的杨辉三角形: 如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如…...
AI制药 - AlphaFold Multimer 的 MSA Pairing 源码
目前最新版本是v2.3.1,2023.1.12 AlphaFold multimer v1 于 2021 年 7 月发布,同时发表了一篇描述其方法和结果的论文。AlphaFold multimer v1 使用了与 AlphaFold 单体相同的模型结构和训练方法,但增加了一些特征和损失函数来处理多条链。Al…...
TitanIDE:云原生开发到底强在哪里?
原文作者:行云创新技术总监 邓冰寒 引言 是一种新的软件开发方法,旨在构建更可靠、高效、弹性、安全和可扩展的应用程序。与传统的应用程序开发方式不同,云原生是将开发环境完全搬到云端,构建一站式的云原生开发环境。云原生的开…...
单片机常用完整性校验算法
一、前言 单片机在开发过程中经常会遇到大文件传输,或者大量数据传输,在一些工业环境下,数据传输并不是很稳定,如何检验数据的完整性就是个问题,这里简单介绍一下单片机常用的几种数据完整性校验方法。 二、CheckSum校…...
Anaconda 的安装配置及依赖项的内外网配置
在分享anaconda 的安装配置及使用前,我们必须先明白anaconda是什么;Anaconda是一个开源的Python发行版本。两者区别在于前者是一门编程语言,后者相当于编程语言中的工具包。 由于python自身缺少numpy、matplotlib、scipy、scikit-learn等一系…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
