python:定时任务、自动化发送邮件、windows下定时计划任务

一、如何自动化发送邮件?(备注:要先开启邮箱的smtp服务)

# -*- coding = utf-8 -*-
'''
@Time : 2023/4/2311:55
@Autor : ithing
@File : do_sendmail.py
@Software : PyCharm
'''
# !/user/bin/python
# -*- coding:utf-8 -*-

import smtplib
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email import encoders


# python对SMTP支持有smtplib和email两个模块,其中,email负责构造邮件,smtplib负责发送邮件。
# 注:简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) ,SMTP是简单的基于的文本的协议
class DoSendMail:

    @classmethod
    def build_email_obj(cls, email_subject, email_from, to_addr_list):
        '''
        构造邮件对象,并设置邮件主题、发件人、收件人,最后返回邮件对象
        :param email_subject:邮件主题
        :param email_from:发件人
        :param to_addr_list:收件人列表
        :return :邮件对象 email_obj
        '''
        # 构造 MIMEMultipart 对象做为根容器
        email_obj = MIMEMultipart()
        email_to = ','.join(to_addr_list)  # 将收件人地址用“,”连接
        # 邮件主题、发件人、收件人
        email_obj['Subject'] = Header(email_subject, 'utf-8')
        email_obj['From'] = Header(email_from) #Header(email_from, 'utf-8')
        email_obj['To'] = Header(email_to, 'utf-8')
        return email_obj

    @classmethod
    def attach_content(cls, email_obj, email_content, content_type='plain', charset='utf-8'):
        '''
        创建邮件正文,并将其附加到跟容器:邮件正文可以是纯文本,也可以是HTML(为HTML时,需设置content_type值为 'html')
        :param email_obj:邮件对象
        :param email_content:邮件正文内容
        :param content_type:邮件内容格式 'plain'、'html'..,默认为纯文本格式 'plain'
        :param charset:编码格式,默认为 utf-8
        :return:
        '''
        content = MIMEText(email_content, content_type, charset)  # 创建邮件正文对象
        email_obj.attach(content)  # 将邮件正文附加到根容器

    @classmethod
    def attach_part(cls, email_obj, source_path, part_name):
        '''
        添加附件:附件可以为照片,也可以是文档
        :param email_obj:邮件对象
        :param source_path:附件源文件路径
        :param part_name:附件名
        :return:
        '''
        part = MIMEBase('application', 'octet-stream')  # 'octet-stream': binary data   创建附件对象
        part.set_payload(open(source_path, 'rb').read())  # 将附件源文件加载到附件对象
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', 'attachment', filename=('utf-8', '', '%s' % part_name))  # 给附件添加头文件
        email_obj.attach(part)  # 将附件附加到根容器

    @classmethod
    def send_email(cls, email_obj, email_host, host_port, username, password, to_addr_list):
        '''
        发送邮件
        :param email_obj:邮件对象
        :param email_host:SMTP服务器主机
        :param host_port:SMTP服务端口号
        :param from_addr:发件地址
        :param to_addr_list:收件地址
        :return:发送成功,返回 True;发送失败,返回 False
        '''
        try:
            '''
                # import smtplib
                # smtp_obj = smtplib.SMTP([host[, port[, local_hostname]]] )
                    # host: SMTP服务器主机。
                    # port: SMTP服务端口号,一般情况下SMTP端口号为25。
                # smtp_obj = smtplib.SMTP('smtp.qq.com', 25)
            '''
            smtp_obj = smtplib.SMTP_SSL(email_host, host_port)  # 连接 smtp 邮件服务器
            smtp_obj.login(username, password)  # 登录邮箱的地址,密码
            smtp_obj.sendmail(username, to_addr_list, email_obj.as_string())  # 发送邮件:email_obj.as_string()即发送的信息
            smtp_obj.quit()  # 关闭连接
            print("发送成功!")
            # # todo 发件人--》# 注意这里不是填邮箱密码而是授权码,授权码需要去邮箱设置里获取
            # smtp = SMTP(user="739105231@qq.com", password="utfpmwehkinxbcib", host="smtp.qq.com")
            # # todo 收件人
            # smtp.sender(to="akldh2552@163.com", attachments=filename)
            return True
        except smtplib.SMTPException as e:
            print("发送失败!")
            print(e)
            return False


if __name__ == "__main__":
    import os
    # (QQ邮箱)
    email_host = "smtp.qq.com"  # smtp 邮件服务器
    host_port = 465  # smtp 邮件服务器端口:SSL 连接
    username = "739105231@qq.com"  # 发件地址
    password = "utfpmwehkinxbcib"
    # (腾讯企业邮箱)
    # email_host = "smtp.exmail.qq.com"  # smtp 邮件服务器
    # (163邮箱)
    # email_host = "smtp.163.com"             # smtp 邮件服务器
    # host_port = 465                         # smtp 邮件服务器端口:SSL 连接
    # from_addr = "发件地址"                  # 发件地址
    # pwd = "授权码"                    # 发件地址的授权码,而非密码

    to_addr_list = ["akldh2552@163.com", "2438822315@qq.com"]  # 收件地址
    #######################################################
    # todo: 邮件正文,3种方式
    # 1
    # email_content = "邮件正文内容"

    # 或者:2
    email_content_html = """
    <p>Python 邮件发送...</p>
    <p><a href="http://www.runoob.com">菜鸟教程链接</a></p>
    <p>图片:</p>
    <p><img src="cid:image1"></p>
    """
    # 或者:3
    # f = open(r"xxx.html", "rb")
    # email_content = f.read()
    # f.close()
    ########################################################
    email_subject = "邮件主题"
    email_from = "ithing <739105231@qq.com>"  # 必须是如此格式
    base_path = os.path.dirname(os.path.abspath(__file__))
    reportfilename = 'D:\\py_project\\pytest_autotest_sample\\report\\report.html'
    source_path = reportfilename
    part_name = 'xxx.html'
    sendmail = DoSendMail()
    email_obj = sendmail.build_email_obj(email_subject, email_from, to_addr_list)
    # todo:attach_content(email_obj, email_content),email_content是邮件正文
    sendmail.attach_content(email_obj, email_content_html)
    sendmail.attach_part(email_obj, source_path, part_name)
    sendmail.send_email(email_obj, email_host, host_port, username, password, to_addr_list)

二、python如何定时执行?

#-*-coding:utf-8 -*-
import os,time

key=1
while key<2:#k如果没有修改,就一直等于1,这样就一直循环
    now_time = time.strftime("%H_%M")
    time.sleep(50)#上面的是以分钟为比对,这里停留小雨59s即可
    if now_time=="12_00":
        os.chdir(r"D:\automotion_project\study\gps_erp")#切换目录到你想要执行的任务中
        time.sleep(1)
        os.system('Python test_gps_erp1.py')#执行py文件
        print(now_time)


    else:
        
        XXXXX
        





三、windows下设置定时计划执行?

步骤一:控制面板------》管理工具:

步骤二:在管理工具中,选择:任务计划程序

步骤三:选择:创建基本任务

步骤四:填写任务名称,简单描述,点击【下一步】,进入“触发器”,选择执行频率,点击【下一步】,选择定时执行时间;再点击【下一步】;

步骤五:再【操作】栏,选择:启动程序,点击【下一步】;进入启动程序页面;下面是参数

程序或脚本:填写运行环境程序,如:python.exe

添加参数:填写你想要执行的文件,绝对路径

起始于:填写运行环境程序的安装目录,即:python。exe安装在的目录

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值