目录
1.前言
本文将介绍使用Windows系统自带的任务计划程序,定时运行一个自动发送天气提醒邮件的批处理程序!这个批处理程序中将调用我们提前编写好的Python程序,包含天气信息爬虫程序和自动化发送邮件的程序。
2.技术介绍
(1)任务计划程序
(2)Windows批处理程序
(3)天气爬虫程序
(4)自动发邮件程序
3.源码
(1)发送邮件的Python源码:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import base64
from spider.dingzhi_weather_spader import GetDingZhiWeather
from spider.sk_weather_spider import GetSkWeather
# 发件人邮箱
sender = '填写发件人邮箱'
# 发件人邮箱密码(注意不是QQ密码,是授权码)
password = '填写发件人邮箱授权码'
# 收件人邮箱,可以是多个邮箱,使用列表存储
receiver = ['xxx@qq.com'] # 记得换成收件人的邮箱
#获取天气
dingzhi_weather = GetDingZhiWeather.get_dingzhi_weather(101220901)
shikuang_weather = GetSkWeather.get_sk_weather(101220901)
data = f'''
********************实况天气********************
{shikuang_weather}
********************今日天气********************
{dingzhi_weather}
********************播报完成********************
'''
print(data)
# 邮件主题
subject = '天气提醒'
info = data
# 发件人昵称,如果昵称包含非ASCII字符,如中文,则请使用base64对昵称进行编码。
nickname = "天气提示助手"
encoded_nickname = str(base64.b64encode(nickname.encode('utf-8'))).replace("b'", "").replace("'", "")
message = MIMEText(info, 'plain', 'utf-8') # 邮件正文
# message['From'] = Header(f'abc <{sender}>') # 发件人昵称(昵称全为ASCII字符)
message['From'] = Header(f'"=?UTF-8?B?{encoded_nickname}?=" <{sender}>') # 发件人昵称(昵称包含非ASCII字符,如中文)
message['To'] = Header(receiver[0]) # 收件人昵称
message['Subject'] = Header(subject, 'utf-8') # 邮件主题
# SSL协议端口号要使用465
smtp_ssl_server = 'smtp.qq.com'
smtp_ssl_port = 465
try:
# 登录SMTP服务器,发送邮件
smtpObj = smtplib.SMTP_SSL(smtp_ssl_server, smtp_ssl_port)
smtpObj.login(sender, password)
smtpObj.sendmail(sender, receiver, message.as_string())
print(f"发送给 {receiver} 的邮件发送成功!")
except smtplib.SMTPException as e:
print("邮件发送失败!", e)
(2)编写run.bat批处理程序:
4.创建定时任务
(1)右键单击左下角Windows图标-计算机管理
(2) 创建任务
(3)自定义触发条件:
(4)编辑操作
在操作里就是启动run.bat批处理程序
5.运行测试
(1)运行python程序测试
(2)运行批处理程序测试
为了方便截图,这里我将批处理程序里最后一行换成pause,目的是暂停批处理程序的执行,直到用户按下任意键才会继续。如果使用exit则运行完毕直接关闭窗口了!
(3)定时任务程序运行
收件人也收到了邮件提示: