专栏首页源懒由码python 轻量级定时框架apscheduler,周中定时给自己发送邮件。

python 轻量级定时框架apscheduler,周中定时给自己发送邮件。

需求:搜集一些信息,并且每日通过邮件推送给自己。

参考链接:

【干货】APScheduler官方文档翻译: https://www.jianshu.com/p/4f5305e220f0

花10分钟让你彻底学会Python定时任务框架apscheduler: https://blog.csdn.net/somezz/article/details/83104368

python apscheduler 暂停和恢复任务: https://www.jianshu.com/p/1c98cbabbf7e

官方api: https://apscheduler.readthedocs.io/en/latest/userguide.html?highlight=BackgroundScheduler#starting-the-scheduler

APScheduler(Python化的Cron)使用总结 定时任务: https://www.cnblogs.com/zhaoyingjie/p/9664081.html

思路:

构造一个定时计划,在指定时间通过smtp服务发送邮件信息。

定时计划使用apscheduler框架。可以轻松的,通过构造triggersd来设置自己的定时任务。

简单例子,对于我们的需求,使用使用cron类触发器:

# 使用后台运行,非阻塞
scheduler = BackgroundScheduler()
# 添加任务 - 3类

# 添加任务 - 1:在指定时间执行
scheduler.add_job(send_job, 'date', run_date=datetime.datetime.now() + datetime.timedelta(seconds=5), args=['text'])

# 添加任务 - 2:间断时间执行
scheduler.add_job(send_job, 'interval', seconds=3,args=['text'])

# 添加任务 - 3: 周期性指定时间执行
scheduler.add_job(send_job,"cron", day_of_week='*', hour='9', minute='20', second='*/2',args=['text'])

# 启动任务
sched.start()

# 中断任务,wait=False表示立刻中断
sched.shutdown(wait=True)

再结合发送邮件的功能,构造定时发送邮件任务。

# 执行邮件发送
# subtype为发送的邮件内容类型,此处默认为Html

def send_mail(mail_content='test',subtype='html',host_server = 'smtp.126.com',sender = '***@126.com',pwd = '***',
             sender_mail = '***@126.com',receiver = '***@126.com',mail_title = 'title'):
    try:
        # ssl登录
        smtp = SMTP_SSL(host_server)
        # set_debuglevel()是用来调试的。参数值为1表示开启调试模式,参数值为0关闭调试模式
        smtp.set_debuglevel(0)
        smtp.ehlo(host_server)
        smtp.login(sender, pwd)

        msg = MIMEText(mail_content, subtype, 'utf-8')
        msg["Subject"] = Header(mail_title, 'utf-8')
        msg["From"] = sender_mail
        msg["To"] = receiver
        smtp.sendmail(sender_mail, receiver, msg.as_string())
        smtp.quit()
        return True
    except Exception as e:
        print('发送失败',e)
        return False

对于如果是对于数据表格,还可以构造成Html内容进行发送DataFrame类型。

# 构建表格内容
def create_table_content(data):
    d='' #表格内容
    # 标题
    t = '<tr>'
    for k in range(len(columns)):
        t = t + '<td>' + columns[k] + '</td>'
    t = t + '</tr>'
    d = d + t
    #数据内容
    for i in range(len(data)):
        t = '<tr>'
        for k in range(len(columns)):
            t = t + '<td>' + str(data.iloc[i,k]) + '</td>'
        t = t + '</tr>'
        d=d+t
    html = """\
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <body>
        <div id="container">
        <p><strong>tips:</strong></p>
        <div id="content">
         <table border="2" bordercolor="red" cellspacing="2">
        """+d+"""
        </table>
        </div>
        </div>
        </div>
        </body>
        </html>
              """
    return html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 论函数的设计应如何才好,返回临时变量 | 返回引用 | 传递引用

    首先这个函数里面,会发生两次构造函数,一次是 变量t,另外一次是return 前,做的一次拷贝构造

    forxtz
  • pandas 一维台账数据与二维表格数据的转换

    需求:低版本excel对于使用透视表后,索引方向会出现合并,需要将其恢复为“台账”样式。

    forxtz
  • C++11 move 语义

    默认的构造函数,就会依次对应赋值,这样就会出现一个问题,如果给起赋值的是一个临时变量 MyTest t = temp,那么,表达式结束以后,temp.d释放掉,...

    forxtz
  • python笔记38-使用zmail发各种邮件案例代码

    本篇介绍使用zmail发各种格式的邮件,并运行成功的代码,小伙伴们只需更换自己的邮箱就可以运行起来了

    上海-悠悠
  • Python发邮件

    week
  • 我写的那六本开源计算机书

    最近不在状态,不太状态,看到最近写的电子书又上GitHub Trending了,就发些以前写的以及还在写的书。 教你设计物联网系统 ? 这是由我的毕业设计延伸出...

    Phodal
  • SAP Spartacus Org Unit User List页面的设计原理

    打开其html实现,里面又消费了cx-org-sub-list这个selector,同时a标签指定了actions属性:

    Jerry Wang
  • sed的pattern space与hold space应用举例

    对于常常使用的sed命令,我们需要知道如下的内容,才能更好的使用它: A. 模式空间: sed 在处理每一行的时候,首先会把要处理的行存入到模式空间里面;然...

    qsjs
  • 老项目迁移问题:@ImportResource导入的xml配置里的Bean能够使用@PropertySource导入的属性值吗?【享学Spring】

    写这篇文章的原动力是由于昨晚深夜一个小伙伴咨询我的一个问题(这位小伙伴这么晚了还在折腾,也是给个大大的赞),涉及到了如题方面的知识。 当然促使我书写本文最重要...

    YourBatman
  • Python基础篇 tuple

    创建元组核查元素是否位于元组Append , Insert , Modify & delete 元组元素

    披头

扫码关注云+社区

领取腾讯云代金券