Fork me on GitHub

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)+'\n'+'爬取的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)  #时间的单位是秒

 

posted @ 2019-03-27 18:22  猿起缘灭  阅读(780)  评论(0编辑  收藏  举报