Python自动化办公之定时发送邮件的实现
作者:渴望力量的哈士奇 发布时间:2021-07-14 01:50:32
标签:Python,定时,邮件
该章节为 Python自动化办公篇 的最后一章,通过定时任务发送邮件的方式学习定时模块的使用 --> schedule 。(该章内容篇幅较少)
定时模块的使用
python中有一个轻量级的定时任务调度的库:schedule。它可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。
schedule 模块的介绍
定时任务:
在 特定的时间 自动的执行一些任务的功能, python 中的 schedule 模块可以使我们方便简单的使用定时任务。
schedule 的安装:
pip install schedule 如果安装失败,尝试一下更换国内的镜像源。
schedule 模块各种时间用法
每过多少分钟执行一次 func函数 ,args是函数的参数 :
schedule.every(count).minutes.do(func, args)
每天的 10:20 执行一次 func 函数,args是函数的参数 :
schedule.every().day.at("10:20").do(func, args)
schedule 模块支持的时间如下:
类型 | 说明 |
---|---|
minutes | 分钟 |
seconds | 秒 |
hour | 小时 |
day | 天 |
week | 周 |
schedule
模块支持的时间远不止这些,这里至介绍了常用的几个时间方式。
schedule 的启动
类型 | 说明 |
---|---|
schedule.run_pending | 执行 |
PS:要放在 "while" 中执行,并且利用时间至少 1秒 的阻塞。
代码示例如下:
# coding:utf-8
import smtplib
import time
import schedule # pip install schedule
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
'''
第三方的 smpt [脚本中涉及的邮箱地址都是假的,请使用自己的真实邮箱地址进行测试]
'''
mail_host = "smtp.sina.com" # 设置邮箱服务器
mail_user = "conan868242" # 设置自己的邮箱
mail_pass = "cb997b01a87232b2" # 这里就是邮箱的口令,也就是授权码;不是密码。
sender = "conan868242@sina.com" # 定义发送者邮箱(其实就是自己)
receivers = ["3241716373@qq.com"] # 定义接受者邮箱(可以是多个接收者)
# message = MIMEText('<p style="color:red;">这是一个测试</p>', "html", "utf-8") # 定义邮件内容;"plain"是格式,表示是普通的文件内容
message = MIMEMultipart() # 定义带有附件的邮件对象
message["From"] = Header(sender) # 在message内定义发送信息 --> 发送者
message["Subject"] = Header("Python 测试邮件发送", "utf-8") # 在message内定义发送信息的标题
# print("加密后的发送内容\n", message.as_string()) # 打印输出加密后的发送内容
attr = MIMEText(open('send.py', 'rb').read(), 'base64', 'utf-8') # 定义带有附件的邮件发送内容;(默认是一种属性);
# 以 open 的形式将需要发送的文件读出来
# 定义内容为"base64"格式
attr['Content-Type'] = 'application/octet-stream' # 针对属性进行格式上的定义;"application/octet-stream"代表着流上的一种协议
# 即定义 "附件" 的类型
attr['Content-Disposition'] = 'attachment;filename="send.py"' # 针对传输的附件定义一个名称
message.attach(attr) # 利用 "message" 的 "attach" 函数将 "附件" 添加进去
message = MIMEText('这是一个带附件的邮件', "plain", "utf-8") # 定义邮件文字内容(即添加邮件的主内容)
def send():
print("邮件开始发送")
try: # 捕获发送邮件的异常
smtpObj = smtplib.SMTP() # 实例化 SMTP 协议对象
smtpObj.connect(mail_host, 25) # 链接 SMTP 服务器
smtpObj.login(mail_user, mail_pass) # 登录邮箱验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送邮件; "message" 通过 "as_string()" 进行发送内容字符串的加密
except smtplib.SMTPException as error:
print("error:{}".format(error))
if __name__ == '__main__':
schedule.every(10).seconds.do(send) # 每隔十秒钟发送一次邮件
while True: # 启动定时任务,延时1秒。
schedule.run_pending()
time.sleep(1)
PS:可以考虑加上发送邮件和定时任务之间的时间差,进行定时任务的调试,这里我就偷懒不写了哈。
运行结果如下:
来源:https://blog.csdn.net/weixin_42250835/article/details/124935113


猜你喜欢
- 在深度学习中,如果我们想获得某一个层上的feature map,就像下面的图这样,怎么做呢?我们的代码是使用keras写的VGG16网络,网
- 介绍set 顾明思义,就是个集合,集合的元素是唯一的,无序的。一个{ }里面放一些元素就构成了一个集合,set里面可以是多种数据类型(但不能
- 在上一讲中已经连接了数据库。就数据库而言,连接之后就要对其操作。但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作
- 如下所示:import http.client, urllib.parseimport http.client, urllib.parsei
- 引言本文讨论 ChatGTP 与 Node.js 的结合,由于最近在学 Remix, 考虑到 Remix 可以单独的作为 API 来使用,并
- 1.手动协程操作:# pip install geventfrom greenlet import greenletdef test():
- 本文实例讲述了Python实现的视频播放器功能。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#! pytho
- 本篇文章主要基于python语言和OpenCV库(cv2)进行车牌区域识别和字符分割,开篇之前针对在python中安装opencv的环境这里
- 前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用。我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一
- 前言使用Python发邮件,是个简单的话题,可是如何可以优雅的轻松的群发邮件,并附加PDF附件,是很多小伙伴的日常工作,却也是很多小白需要费
- 随机漫步是这样行走得到的途径:每次行走都是完全随机的,没有明确的方向,结果是由一系列随机决策决定的。random_walk.py#rando
- 列表A是一个通过扩张对象浏览器(object explorer)中可编程性节点而建立的实例,选择存储过程,然后右击并选择新的存储过程。 许多
- 爬虫所需要的功能,基本上在urllib中都能找到,学习这个标准库,可以更加深入的理解后面更加便利的requests库。首先在Pytho2.x
- 本文实例为大家分享了Python实现图片格式转换的具体代码,供大家参考,具体内容如下碰上这样一个情景:我从网络上下载了一张表情包图片,存放在
- 本文实例讲述了MySQL无法存储Emoji表情问题的解决方法。分享给大家供大家参考,具体如下:数据插入的时候报错:1366 - Incorr
- 前言SQL SERVER 2012中新增了IIF函数,这个函数在VB或是ACCESS中是存在的。感兴趣的朋友们下面来一起学习学习吧。格式如下
- //使用原型继承,中间使用临时对象作为Child的原型属性,临时对象的原型属性再指向父类的原型, //防止所有子类和父类原型属性都指向通一个
- 引言这两天遭遇了手机号登录相关的压测需求,算是比较棘手的。主要原因有两个,第一:之前从来没有接手过这个项目,不熟悉各种规则;第二:数据量偏大
- 1。mysql数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制,其实就是把主数
- 本片博文主要介绍在Python3 环境下把用户名密码编码成字符串。代码如下:import base64def get_basic_auth_