zoukankan      html  css  js  c++  java
  • python3 通过qq邮箱定时发送邮件

    下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量
    # -*- coding:utf-8 -*-
    from common.redis import redisServ
    from common.mysql import database
    from email.mime.text import MIMEText
    from email.utils import formataddr
    import smtplib
    import time
    import sched
    
    my_sender = 'xxx@qq.com'  # 发件人邮箱账号
    my_pass = 'eqhsgi'  # 发件人邮箱密码(当时申请smtp给的口令)
    my_user = 'xxx@qq.com'  # 收件人邮箱账号,我这边发送给自己
    
    # 初始化sched模块的scheduler类
    # 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
    schedule = sched.scheduler(time.time, time.sleep)
    
    def mail():
        ret=True
        try:
            create_time = time.strftime("%Y-%m-%d",time.localtime())
            sql = "select count(1) from amazon_spider_log where create_time>'{create_time}'".format(create_time=create_time)
            count = database.query(sql)   #这个mysql操作工具类没有贴出来,不需要的可以直接删除
            url_num = redisServ.llen('queue:amazon:goods_list_page')  #这个redis操作工具包同样没有贴出来,不需要可以删除
            msg=MIMEText('redis队列中url数量:'+str(url_num)+'
    '+'爬取的sku数:'+str(count[0][0]),'plain','utf-8')
            msg['From']=formataddr(["小污鬼",my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To']=formataddr(["小瓜皮",my_user])              # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject']="阿波罗项目-监控"                # 邮件的主题,也可以说是标题
    
            server=smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是465
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender,[my_user,],msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()# 关闭连接
        except Exception as e:# 如果 try 中的语句没有执行,则会执行下面的 ret=False
            ret=False
            print(e)
        return ret
    
    # 被周期性调度触发的函数
    def execute_command(inc):
        print('执行主程序')
    
        '''''
        定时发送邮件
        '''
        ret = mail()
        if ret:
            print("邮件发送成功")
        else:
            print("邮件发送失败")
        schedule.enter(inc, 0, execute_command, (inc,))
    
    
    def main(inc):
        # enter四个参数分别为:间隔事件、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数,
        # 给该触发函数的参数(tuple形式)
        schedule.enter(0, 0, execute_command,(inc,))
        schedule.run()
    
    # 每60秒查看下网络连接情况
    if __name__ == '__main__':
        main(60*60*13)  #时间的单位是秒
  • 相关阅读:
    JSP九大隐含对象
    男人失业了,他没有告诉女人
    Ajax与C#应用详细实例
    成都软件园实习那些话
    C#的线程池的那些事
    一家公司的面试经历和现在的我
    我经常逛的几个网站
    我们该如何看待程序员的加班生活?
    socket心跳+聊天
    Python pip 更新问题汇总
  • 原文地址:https://www.cnblogs.com/gunduzi/p/10609578.html
Copyright © 2011-2022 走看看