Python实现定时发送监控邮件
作者:阿黎逸阳 发布时间:2023-12-29 06:38:57
不管是在信贷领域还是支付领域,作为一个风控人员,我们都需要对部署的策略模型进行监控,信贷领域可能还需要对客户的逾期表现进行监控。这时,如果我们能用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 = "2275885700@qq.com" # 发送者邮箱名
mail_license = '****************' # 发送者邮箱授权码,即开启POP3/SMTP服务获取的token,需替换成你的邮箱
mail_host = "smtp.qq.com" # SMTP服务器,这里为qq邮箱,若为163邮箱请用163替换qq
mail_receivers = ["2275885700@qq.com","wawoxzy@163.com"] #收件人邮箱
mail = MIMEMultipart('related') # 设置邮件主体
mail["From"] = "sender_name<2275885700@qq.com>" # 设置发送者邮箱
mail["To"] = "receiver_1_name<2275885700@qq.com>,receiver_2_name<wawoxzy@163.com>" #设置接受者邮箱
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每天自动发送邮件已讲解完毕,感兴趣的同学可以自己跟着本文,自行实现一遍。
来源:https://blog.csdn.net/qq_32532663/article/details/121440707


猜你喜欢
- 在本文中,以'哈'来解释作示例解释所有的问题,“哈”的各种编码如下: 1. UNICODE (UTF8-16),C854;
- 如何用眼睛来控制鼠标?一种基于单一前向视角的机器学习眼睛姿态估计方法。在此项目中,每次单击鼠标时,我们都会编写代码来裁剪你们的眼睛图像。使用
- 本文实例讲述了Python编程实现及时获取新邮件的方法。分享给大家供大家参考,具体如下:#-*- encoding: utf-8 -*-im
- delete 删除一张大表时空间不释放,非常慢是因为占用大量的系统资源,支持回退操作,空间还被这张表占用着。truncate table 表
- chr()函数与ord()函数解析chr()函数用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。返回
- 前言字典是Python中最强大的数据类型之一,本文将给大家详细介绍关于Python合并两个字典(dict)的相关内容,分享出来供大家参考学习
- 没有,用case when 来代替就行了. 例如,下面的语句显示中文年月 select getdate() as 日期,case month
- 将int转换成datetime格式原始时间格式users['timestamp_first_active'].head()原
- 1. 首先VC++的DLL的导出函数定义成标准C的导出函数: #ifdef LRDLLTEST_EXPORTS #define LRDLLT
- 1、preferences->Java->Code Style->Code Formatter->Show... ,
- 在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法:1. /*+ALL_ROWS*
- JS怎样知道Flash广告条被网友点击过? 1、Flash广告条不是我做的,它的链接是写在里面的。 2、我想统计这个Flash被网友点击了多
- 好吧,我承认我是对晚上看到一张合适的票转让但打过电话去说已经被搞走了这件事情感到蛋疼。直接上文件吧。#coding: utf-8'&
- 问题:生产环境的操作系统和数据库可能是英文版的,而我们的母语是中文,如果英语能力差点,可能有时对英语环境下的数据库脚本报错的英文提示看不懂,
- 在python的时间使用时,我们无非就是输出字符串的形式,又或者是其他的形式跟字符串之间的来回转换。时间数组对于我们获取具体的年或是天数,都
- 本文跟大家谈谈为什么要学python以及如何学好python。一、作为初学者,应该如何学python?很多人对python缩进试的简洁表达不
- 如下所示:def prn_obj(obj): print '\n'.join(['%s:%s'
- 作为主题的制作者, 除了实现功能, 展示界面, 还有责任使主题灵活多变, 以满足更多人不同的需求.可能一些朋友曾为选用双栏主题 (单侧边栏)
- 最初我们介绍到 Matplotlib 可以绘制2D图形,并且介绍了一些常见图形的绘制方法,其实不仅可以绘制2D图形,现在较新版本的 Matp
- 本文为官方文档译文,官方文档现已非机器翻译 https://docs.microsoft.com/zh-cn/aspnet/core/fun