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) #时间的单位是秒