基于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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
Python中的面向对象编程详解(下)
Apr 13 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
实例讲解Python中global语句下全局变量的值的修改
Jun 16 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python语言的变量认识及操作方法
Feb 11 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
Windows 下python3.8环境安装教程图文详解
Mar 11 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 文章调用类代码
2011/08/11 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
jQuery提交多个表单的小例子
2013/06/30 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
JavaScript toUpperCase()方法使用详解
2016/08/26 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
Python中的包和模块实例
2014/11/22 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
windows下安装Python和pip终极图文教程
2017/03/05 Python
python基础之入门必看操作
2017/07/26 Python
python实现抖音点赞功能
2019/04/07 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
关于Keras Dense层整理
2020/05/21 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
报纸媒体创意广告词
2014/03/17 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
深入理解go slice结构
2021/09/15 Golang
nginx日志格式分析和修改
2022/04/28 Servers
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技