Python實現定時發送監控郵件
不管是在信貸領域還是支付領域,作為一個風控人員,我們都需要對部署的策略模型進行監控,信貸領域可能還需要對客戶的逾期表現進行監控。這時,如果我們能用python自動連接數據庫,對策略、模型、貸後表現等數據進行分析處理,輸出標準表格或圖片到固定文件夾中。再用python自動定時給領導和同事發送監控郵件,就可以讓相關人員及時瞭策略模型的運行狀態、項目的逾期動態,是一件很有意義的事。
本文著重講解如何用python連接郵箱,自動發送郵件,至於python連接數據庫進行數據處理模塊,後續有時間瞭再跟大傢分享。
一、自動定時任務運行詳情
首先來看下,自動定時任務發送郵件的運行詳情,視頻鏈接
二、開啟POP3/SMTP服務
在用python連接郵箱時,需要開啟POP3/SMTP服務,本文以qq郵箱為例進行講解,其它郵箱開啟方法請自行百度。首先登錄網頁版qq郵箱—>點擊設置—>點擊帳戶—>下拉找到POP3/IMAP/SMTP/ Exchange/CardDAV/CalDAV服務。
然後開啟POP3/SMTP服務(根據指示步驟操作即可)。
開啟POP3/SMTP服務主要是想獲取代碼中用到的token,是一串類似字符串的文本,大傢在開啟服務的過程中,記得保存。
三、發送郵件
使用python發送郵件時,主要用到smtplib和email庫,這兩個庫是自帶的,直接導入即可。
1 導入庫
import os import email import smtplib import datetime from email.header import Header from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart #加載發送郵件需要用到的庫 os.chdir(r"E:\自動化郵件") #設置發送郵件時附件文件存放的地址
其中smtplib模塊主要負責發送郵件,email模塊主要負責構建郵件。os.chdir
中的文件路徑記得替換成你存放郵件附件的路徑。
2 設置郵件內容
平常我們發送郵件,主要需填寫收件人、郵件主題、郵件正文、附件等信息。使用python發送郵件,同樣也是填寫這些信息,不過是在語句中註明。
mail_sender = "[email protected]" # 發送者郵箱名 mail_license = '****************' # 發送者郵箱授權碼,即開啟POP3/SMTP服務獲取的token,需替換成你的郵箱 mail_host = "smtp.qq.com" # SMTP服務器,這裡為qq郵箱,若為163郵箱請用163替換qq mail_receivers = ["[email protected]","[email protected]"] #收件人郵箱 mail = MIMEMultipart('related') # 設置郵件主體 mail["From"] = "sender_name<[email protected]>" # 設置發送者郵箱 mail["To"] = "receiver_1_name<[email protected]>,receiver_2_name<[email protected]>" #設置接受者郵箱 subject_content = '【日報】風險監測' # 設置郵件主題 mail["Subject"] = Header(subject_content,'utf-8') # 添加郵件主題 body_content = """ 各位好, 這是風險監測日報,請查收! BestRegards, 謝XX """ # 設置郵件正文 message_text = MIMEText(body_content,"plain","utf-8") # 設置正文內容、文本格式、編碼方式 mail.attach(message_text) # 向MIMEMultipart對象中添加文本對象
註意:mail_license
中的值需替換成你在開啟POP3/SMTP服務時獲取的token。以上語句中的內容,可根據需要自行調整,如有疑問可參考後面的備註信息。
3 添加附件
附件信息一般是圖片和數據文檔,故本文對這兩種附件進行闡述,你隻需把名字換成你的附件名即可。
image_picture = open('yk2.jpg','rb') # 打開附件圖片 message_image = MIMEImage(image_picture.read()) # 設置讀取獲取的二進制數據 #message_image.add_header('Content-ID','<image1>') message_image["Content-Disposition"] = 'attachment; filename="yk2.jpg"' # 設置附件圖片名稱 mail.attach(message_image) # 把圖片添加到郵件中去 image_picture.close() # 關閉剛才打開的圖片 mail.attach(message_image) # 把圖片添加為郵件附件 atta = MIMEText(open('BlackFriday.csv', 'rb').read(),'base64','utf-8') # 添加數據(csv、excel等)附件 atta["Content-Disposition"] = 'attachment; filename="BlackFriday.csv"' # 設置數據(csv、excel等)附件名稱 mail.attach(atta) # 把csv附件添加到郵件中去
4 發送郵件
郵件正文和附件都設置好後,就可以發送郵件啦,具體語句如下:
smtp = smtplib.SMTP() # 創建SMTP對象 smtp.connect(mail_host, 25) # 設置發件人郵箱的域名和端口,端口地址為25 smtp.set_debuglevel(1) # 打印和SMTP服務器交互的所有信息 smtp.login(mail_sender,mail_license) # 根據郵箱地址和郵箱收起碼登錄郵箱 smtp.sendmail(mail_sender, mail_receivers, mail.as_string()) # 發送郵件,並設置郵件內容格式為str now_time = datetime.datetime.now().strftime('%Y-%m-%d') # 獲取當前時間 print(now_time+" 日監控郵件發送成功") # 打印某日成功發送郵件記錄 smtp.quit() # 關閉SMTP對象
至此,郵件已發送完畢,接著我們來看下郵件發送效果吧。
5 郵件發送效果
python發送的郵件和我們手動發送的郵件是一樣的,具體可見如下圖片。
接下來,我們看看如何設置定時任務,每天定時發送郵件吧。
四、設置定時任務
在前面兩節中介紹瞭如何用python自動發送郵件。本節介紹如何設置定時任務,在固定時間去抓取固定文件中的內容。
1 設置定時任務的具體步驟
首先,點擊windows桌面左下角的搜索菜單,輸入“控制面板”,就會在最佳匹配中出現控制面板,點擊控制面板。
接著,在控制面板的搜索框輸入”任務“兩個字,就會出現管理工具和計劃任務,點擊計劃任務。
接著,點擊創建基本任務,填寫名稱和描述(可自定義),點擊下一步默認為每天,如需改成每周,自行選擇即可。
點擊下一步,設置任務開始的時間,點擊下一步,選擇啟動程序,再點擊下一步。接著點擊瀏覽,選擇需要定時是python腳本,最後點擊完成即可。
2 設置定時任務的教學視頻
最後,來看下設置定時任務的教學視頻,大傢可以根據具體步驟參考視頻進行設置。
至此,應用python每天自動發送郵件已講解完畢,感興趣的同學可以自己跟著本文,自行實現一遍。