百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

每日一课 | 定时执行Python脚本自动发送QQ邮件

off999 2024-12-13 15:36 14 浏览 0 评论

【导语】:你是否需要每周手动给leader发送工作邮件,每次都需要重复性工作,那么我们来用python吧,来设置定时任务!

一、代码编写定时任务脚本

# coding: utf-8
import pandas as pd
import datetime
from sqlalchemy import create_engine
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

import warnings

warnings.filterwarnings("ignore")  # 用于排除警告


def znf_jxh():
    # 初始化数据库连接,使用pymysql模块# MySQL的用户:root, 密码:123456, 端口:3306,数据库:test
    con = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test')
    # 查询语句,选出表中的所有数据
    sql = '''SELECT day1,COUNT(DISTINCT a.uid) AS '活跃',
COUNT(DISTINCT CASE WHEN day2-day1 = 1 THEN a.uid END) 次留,
COUNT(DISTINCT CASE WHEN day2-day1 = 3 THEN a.uid END) 三留,
COUNT(DISTINCT CASE WHEN day2-day1 = 7 THEN a.uid END) 七留,
CONCAT(COUNT(DISTINCT CASE WHEN day2-day1 = 1 THEN a.uid END)/COUNT(DISTINCT a.uid) * 100,'%%') as 次留存率,
CONCAT(COUNT(DISTINCT CASE WHEN day2-day1 = 3 THEN a.uid END)/COUNT(DISTINCT a.uid) * 100,'%%') as 三日留存率,
CONCAT(COUNT(DISTINCT CASE WHEN day2-day1 = 7 THEN a.uid END)/COUNT(DISTINCT a.uid) * 100,'%%') as 七日留存率
FROM
(SELECT uid, DATE_FORMAT(dayno,'%%Y%%m%%d') as day1 from aui where app_name = '相机') AS a 
LEFT JOIN 
(SELECT uid, DATE_FORMAT(dayno,'%%Y%%m%%d') as day2  from aui where app_name = '相机') AS b
ON a.uid = b.uid
GROUP BY a.day1;'''
    # read_sql_query的两个参数: sql语句, 数据库连接
    df = pd.read_sql_query(sql, con=con)
    print("读取数据成功!!!")
    df.to_excel(r"C:/Users/cherich/Desktop/产品拆分.xlsx", index=False)


def send_email():
    mail_user = '*********@qq.com'  # 邮箱登录名,次处使用QQ邮箱,填写QQ号即可,不用带@qq.com
    mail_pass = '*********'  # QQ邮箱授权码,如何获取可百度
    sender = '*********@qq.com'  # 发件人
    receivers = ['*********@qq.com']  # 收件人列表,list形式
    #     chaosong  = ['*********@qq.com']     # 抄送人列表,list形式

    # 设置邮件体对象,对象类型为 mixed,可以发送附件
    subject = "每日发送销售订单产品拆分列表"  # 邮件主题
    content = "发送时间:" + str(a) + "\n" + "订单时间:" + str(b) + "到" + str(c)  # 邮件摘要

    msg = MIMEMultipart()  # 邮件体对象,此处可加入参数, 具体可百度
    msg.attach(MIMEText(content, 'plain', 'utf-8'))  # 邮件正文 text/plain # 中文需参数‘utf-8’,单字节字符不需要

    msg['subject'] = Header(subject, 'utf-8')  # 加入邮件主题
    msg['From'] = "{}".format(sender)  # 加入邮件发送人
    msg['To'] = ",".join(receivers)  # 加入邮件接收人

    # 加入附件
    File2 = r"C:/Users/cherich/Desktop/产品拆分.xlsx"  # 如果是定时发送的报表,此处可以写死
    attFile = MIMEApplication(open(File2, 'rb').read())
    attFile.add_header('Content-Disposition', 'attachment', filename=File2)
    msg.attach(attFile)

    if __name__ == '__main__':
        try:
            # 发送邮件,参数设置
            sftp_obj = smtplib.SMTP_SSL(host='smtp.qq.com', port=465)
            sftp_obj.login(mail_user, mail_pass)
            sftp_obj.sendmail(sender, receivers, msg.as_string())
            sftp_obj.quit()
            sftp_obj.close()
            print('\nThe email has been sent successfully')
        except Exception as err:
            print('\n Email failed to be sent out. Please check !')
            print(err)


if __name__ == '__main__':
    a = datetime.date.today()  # 用于写入邮件正文内容中
    b = datetime.date.today() - datetime.timedelta(days=6)  # 用于写入邮件正文内容中
    c = datetime.date.today() - datetime.timedelta(days=4)  # 用于写入邮件正文内容中
    znf_jxh()
    send_email()

二、设置windows定时任务

1.点击开始--点击windows管理工具--点击任务计划程序;

2、点击创建任务--常规--输入任务名称--输入任务描述

3、点击触发器--新建--设置任务时间--点击确认

4、点击操作--新建--浏览--输入程序或脚本路径(你的python.exe所在路径)--点击确定


完成!
希望本文的内容对大家的学习或者工作能带来一定的帮助,每天进步一点点,加油。

相关推荐

Modbus RTU 指令基本功能介绍(modbus-rtu)

ModbusRTU协议概述:入门级知识点ModbusRTU协议,是工业自动化领域应用广泛的串行通信协议。它简单、可靠,在各种工业设备之间建立通信桥梁,实现数据的采集和控制。ModbusRTU...

AIOT开发选型:行空板 K10 与 M10 适用场景与选型深度解析

前言随着人工智能和物联网技术的飞速发展,越来越多的开发者、学生和爱好者投身于创意项目的构建。在众多的开发板中,行空板K10和M10以其独特的优势脱颖而出。本文旨在为读者提供一份详尽的行空板K...

程序员花了1个月时间,手搓低成本机械臂:跟着他你也能复刻一台

在开源硬件的广阔天地中,SO-ARM100作为一款备受瞩目的开源机械臂项目脱颖而出。它以标准化的四轴机械臂设计为核心,构建起一个开放共享的技术平台,为机械臂爱好者与开发者提供了绝佳的远程操作实践场域...

RPC接口测试技术-Tcp 协议的接口测试

首先明确Tcp的概念,针对Tcp协议进行接口测试,是指基于Tcp协议的上层协议比如Http,串口,网口,Socket等。这些协议与Http测试方法类似(具体查看接口自动化测试章...

同事开玩笑说:你这个python程序要是外流出去了,可能会有危险

引言公司因为业务原因,购入了一些高灵敏高精度的振动传感器。老板说:“拿去进行测试,看看数据如何?”吭哧吭哧接入数据,一看,确实精度和灵敏度非常高。具体多高呢?将传感器固定在相关的结构物上,在办公室中人...

STM32搭建简易环境监测站并通过网络实时上报

一、系统总体架构本系统以STM32F407为核心,搭建一个环境监测节点,能够采集温湿度、光照、空气质量等数据,并通过OLED屏显示,同时通过ESP8266模块实现局域网数据上报。适合室内空气监测、智慧...

STM32通过NB-IoT模块实现远程告警推送

一、项目概述本系统以STM32F103C8T6作为主控核心,通过串口控制NB-IoT通信模块(移远BC26),实现对外设状态的远程监测和异常自动告警推送(如温度超限、设备震动异常等)。支持通过UDP或...

MicroPython 玩转硬件系列3:上电执行程序

1.引言上一篇:MicroPython玩转硬件系列2:点灯实验我们在ESP32上实现了LED灯的闪烁,但是有一个问题,该功能的实现需要我们在串口终端里去手动执行代码,可不可以让ESP32上电后自动...

打标机与上位机通讯异常如何快速定位?串口工具验证流程拆解

打标机与上位机通信过程中出现的错误问题需要通过串口通信助手验证,主要原因在于串口通信的底层特性以及问题隔离的工程需求。以下是原理说明和验证方法:一、验证原理底层数据透明化串口通信本质上是基于二进制数据...

4G短信猫发送中文短信(Python)(4g短信)

4G短信猫发送中文短信(Python)4G短信猫发送中文短信的方式可以使用TEXT模式或者PDU模式。1.TEXT模式在TEXT模式下发送中文短信的指令序列:AT+CSCS="UCS2...

ESP32如何刷microPython固件(esp32 固件升级)

目录为什么要刷microPython固件固件和工具的获取刷固件的步骤检验是否成功1.为什么要刷固件microPython是由计算机工程师DamienGeorge设计出来的,他的初衷是——用Pyth...

CH9329双头线使用说明(双头线是干什么用的)

目录1.介绍说明2.测试说明3.修改为ASCII模式(CH9328字符模式)常见问题解答:1.介绍说明CH9329双头线是集成了CH9329+CH340芯片的成品线,主要作用是使用主控电脑发送串口指令...

Windows下最简单的ESP8266_ROTS_ESP-IDF环境搭建与腾讯云SDK编译

前言其实也没啥可说的,只是我感觉ESP-IDF对新手来说很不友好,很容易踩坑,尤其是对业余DIY爱好者搭建环境非常困难,即使有官方文档,或者网上的其他文档,但是还是很容易踩坑,多研究,记住两点就行了,...

CPU眼里的:Python 和 C(cpp和python)

“Python跟C语言有什么联系?它们在计算机系统中分别扮演着什么角色?”01提出问题Python可能是当今最热门的编程语言,凭借简洁易读的语法和强大的生态,成为许多新手程序员的首选。然而,作为一门解...

Python在工控领域的应用与优势(python工业控制系统)

前言之前利用Python编写了一些S7系列的PLC调试工具和组态开发,今天就具体讲讲Python在工控领域还有哪些应用与优势。Python在工业控制工控领域的应用逐渐增多,得益于其简洁的语法、丰富的生...

取消回复欢迎 发表评论: