基于Python脚本实现邮件报警功能


Posted in Python onMay 20, 2020

使用了smtplib等第三方库,进行发送邮件,完成邮件报警功能

如下是实例 :

#!/usr/bin/python
 
import glob
import operator
from optparse import OptionParser
import smtplib
import email.MIMEText as MIMEText
import email.Utils.formadate as formatdate
 
msg = ""
#主方法
def main():
  global options
  global msg
 
  parser = OptionParser(add_help_option=False)
  parser.add_option("-m", "--mail", dest="mail", type="str", help="email address to send report result (comma separated)")
  parser.add_option("-t", "--title", dest="title", type="str", help="email title (default:Error File Count)")
  parser.add_option("-a", "--admin", dest="admin", type="str", help="set sender address. works with -m option")
  (options, args) = parser.parse_args()
 
  #这里监控文件夹下的文件数,超出25个文件即报警
  datanum = cntFiles("/data/","csv")
  if (operator.gt(datanum,25)):
    msg += " Please be alert : \n the number of files under /data/ path is greater than 25 :"
    msg += "\n =========================================="
    msg += "\n The number of files is : " + str(datanum)
    sendmsg(options,msg)
  print("==== end ====")
 
#添加发送邮件的信息
def sendmsg(options,msg):
  if options.mail:
    toAddr = options.mail
    if options.admin:
      fromAddr = options.admin
    else:
      fromAddr = 'zhangsan@neiyou.cn'#这里是公司的公用SMTP邮箱账号
 
    if options.title:
      subject = options.title
    else:
      subject = 'File Stacking Alarm'
    msg += "\n ========================================== \n"
    print( msg)
    msg = createMsg(fromAddr, toAddr, subject, msg)
    print( msg)
    send(fromAddr, toAddr, msg)
  else:
    print( msg)
 
#glob方法,统计文件夹下的文件数
def cntFiles(in_directory, ext):
  stage = len(glob.glob1(in_directory,"*." + ext))
  return stage
 
#创建邮件头
def createMsg(fromAddr, toAddr, subject, body):
  msg = MIMEText(body)
  msg['Subject'] = subject
  msg['To'] = toAddr
  msg['From'] = fromAddr
  msg['Date'] = formatdate()
  return msg
 
#发送邮件
def send(fromAddr, toAddr, msg):
  try:
    #这里添加公司的SMTP邮箱地址
     s = smtplib.SMTP('192.168.12.120')
     s.sendmail(fromAddr, toAddr.split(','), msg.as_string())
     s.close()
     print("SUCCESS: sending email")
  except smtplib.SMTPException:
     print("ERROR: sending email")
 
if __name__ == '__main__':
  main()

linux上做计划任务,把指令添加进计划任务中:

Errymsfileemail.py -m zhangsan@gongsi.cn -t "[ERROR/$HOST] File Stacking Alarm"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之缩进介绍
Aug 29 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
Python向日志输出中添加上下文信息
May 24 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
python assert的用处示例详解
Apr 01 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
python Tkinter的图片刷新实例
Jun 14 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python实现按关键字筛选日志文件
Dec 24 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
Pycharm打开已有项目配置python环境的方法
Jul 03 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 #Python
Django 解决model 反向引用中的related_name问题
May 19 #Python
django queryset 去重 .distinct()说明
May 19 #Python
django正续或者倒序查库实例
May 19 #Python
Django model.py表单设置默认值允许为空的操作
May 19 #Python
django 模型中的计算字段实例
May 19 #Python
Django获取model中的字段名和字段的verbose_name方式
May 19 #Python
You might like
php面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
nodejs服务搭建教程 nodejs访问本地站点文件
2017/04/07 NodeJs
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
微信小程序日历效果
2018/12/29 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
python中的turtle库函数简单使用教程
2018/07/23 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
Python zip函数打包元素实例解析
2019/12/11 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
师德个人剖析材料
2014/02/02 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
2014年创卫工作总结
2014/11/24 职场文书
2014年乡镇安全生产工作总结
2014/12/02 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript