万叶集 |
---|
隐约雷鸣,阴霾天空。 |
但盼风雨来,能留你在此。 |
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,致力于用白话讲解技术知识的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
系列专栏:
Python全栈系列 - [更新中] 【 本文在该系列】
Python零基础入门篇
Python语法进阶篇
Python自动化办公篇
网安之路系列
网安之路踩坑篇
网安知识扫盲篇
Vulhub 漏洞复现篇
Shell脚本编程篇
Web攻防篇 2021年9月3日停止更新,转战先知等安全社区
渗透工具使用集锦 2021年9月3日停止更新,转战先知等安全社区
⭐️ 点点点工程师系列
测试神器 - Charles 篇
测试神器 - Fiddler 篇
测试神器 - Jmeter 篇
自动化 - RobotFrameWork 系列
自动化 - 基于 JAVA 实现的WEB端UI自动化
自动化 - 基于 MonkeyRunner 实现的APP端UI自动化
该章节为 Python自动化办公篇 的最后一章,通过定时任务发送邮件的方式学习定时模块的使用 --> schedule
。(该章内容篇幅较少)
python中有一个轻量级的定时任务调度的库:schedule
。它可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。
定时任务:
在
特定的时间
自动的执行一些任务的功能, python 中的schedule
模块可以使我们方便简单的使用定时任务。
schedule
的安装:
pip install 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.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 = "[email protected]" # 定义发送者邮箱(其实就是自己)
receivers = ["[email protected]"] # 定义接受者邮箱(可以是多个接收者)
# message = MIMEText('这是一个测试
', "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:可以考虑加上发送邮件和定时任务之间的时间差,进行定时任务的调试,这里我就偷懒不写了哈。
运行结果如下: