1. 程式人生 > 實用技巧 >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)

再結合傳送郵件的功能,構造定時傳送郵件任務。

# 執行郵件傳送
def send_mail(mail_content='test'):
    try:
        host_server = 'smtp.126.com'
        # sender為發件人的郵126箱
        sender = ***@126.com'
        # pwd為126郵箱的授權碼
        pwd = '***'  
        # 發件人的郵箱
        sender_mail = '***@126.com'
        # 收件人郵箱
        receiver = '***@126.com'
        # 郵件標題
        mail_title = 'python liangzi'

        # 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, "plain", '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()
        print("傳送成功")
        return True
    except Exception as e:
        print(e,'傳送失敗')
        return False