我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python脚本email

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python脚本email

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import re
import string
import os
import time
import httplib
import urllib

import ConfigParser

import MySQLdb
from smtplib import SMTP

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
#from email.Header import Header
# python 2.3.*: email.Utils email.Encoders
from email.utils import COMMASPACE,formatdate
from email import encoders

#server['name'], server['user'], server['passwd']
def send_mail(server, fro, to, subject, text, files=[]): 
    assert type(server) == dict 
    assert type(to) == list 
    assert type(files) == list 
 
    msg = MIMEMultipart() 
    msg['From'] = fro 
    msg['Subject'] = subject 
    msg['To'] = COMMASPACE.join(to) #COMMASPACE==', ' 
    msg['Date'] = formatdate(localtime=True) 
    msg["Accept-Language"]="zh-CN"
    msg["Accept-Charset"]="ISO-8859-1,utf-8"
    txt=MIMEText(text)
    txt.set_charset("utf-8")
    msg.attach(txt) 
 
    for file in files: 
        part = MIMEBase('application', 'octet-stream') #'octet-stream': binary data 
        part.set_payload(open(file, 'rb'.read())) 
        encoders.encode_base64(part) 
        part.add_header('Content-Disposition', 'p_w_upload; filename="%s"' % os.path.basename(file)) 
        msg.attach(part) 
 
    #import smtplib 
    smtp = SMTP(server['name']) 
    smtp.login(server['user'], server['passwd']) 
    smtp.sendmail(fro, to, msg.as_string()) 
    smtp.close()


#tolist.split(',')
def send_sms(to,msg):
    '''
    send a sms
    '''
    if not to.isdigit():
        return
    if len(to) != 11:
        return

    params = urllib.urlencode({'mobiles':to, 'oauth_consumer_key': 'passport', 'oauth_signature': '(passprot-oauth-userkye%$&)2013-05-20publish','content':msg}) 
    headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36",
               "Content-type" : "application/x-www-form-urlencoded", 
               "Accept-Encoding" : "gzip,deflate,sdch",
               "Accept-Language" : "zh-CN,zh;q=0.8",
               "Accept" : "*/*"} 
    #http://sms.guagua.cn/sender/forthwith/smsess.do
    conn = httplib.HTTPConnection("sms.guagua.cn:80") 
    conn.request("POST", "/sender/forthwith/smsess.do", params, headers) 
    response = conn.getresponse()
    #print response.status, response.reason 
    #print response.msg
    #data = response.read()
    #print data
    conn.close()
    return {response.status:response.reason}


def read_ini():
    '''
    read db.ini file
    return list, length=5
    '''
    if not os.path.isfile('/usr/local/nagios/libexec/db.ini'):
        print ('db.ini not exsit!')
        return
    
    db_conf=[]

    cf = ConfigParser.ConfigParser()
    cf.read('/usr/local/nagios/libexec/db.ini')

    db_ip = cf.get('DB', 'ip')
    db_conf.append(db_ip)
    db_port = cf.getint('DB', 'port')
    db_conf.append(db_port)
    db_user = cf.get('DB', 'user')
    db_conf.append(db_user)
    db_pwd = cf.get('DB', 'pwd')
    db_conf.append(db_pwd)
    db_db = cf.get('DB', 'db')
    db_conf.append(db_db)

    return db_conf


def arg_parse(report_context):
    '''
    parse [COMM_MONITER:StatusLevel:serverType:serverid] by regex
    '''
    assert type(report_context) == list
    parselist = []
    pattern = re.compile(r'\[COMM_MONITER:(\d+):(\d+):(\d+)\](.*)')
    for line in report_context:
        match = pattern.findall(line)
        if match:
            parselist.append(match[0])

    return parselist

# OK 0
# WARNING 1
# CRITICAL 2
# UNKNOWN 3

def state_svr(state):
    ret = 3
    if 0 == cmp(state, 'OK'):
        ret = 0
    elif 0 == cmp(state, 'WARNING'):
        ret = 1
    elif 0 == cmp(state, 'CRITICAL'):
        ret = 2
    elif 0 == cmp(state, 'UNKNOWN'):
        ret = 3

    return ret
#"$HOSTALIAS$" 1 
#"$HOSTADDRESS$" 2
#"$LONGDATETIME$" 3
#"$SERVICESTATE$" 4
#"$SERVICEDESC$" 5
#"$SERVICEOUTPUT$$LONGSERVICEOUTPUT$" 6
#"$CONTACTEMAIL$" 7
#"$last_state_change$" 8
#"$sms$" 9 
#"$cmd$" 10 
def main():
    cur_pwd = os.getcwd()
    fp = open('/usr/local/nagios/libexec/mail.log','w')
    fp.write(cur_pwd+os.linesep)
    fp.write(str(len(sys.argv))+os.linesep)
    for a in sys.argv:
        fp.write(a+os.linesep)
    #fp.close()

    if len(sys.argv) < 11:
        fp.write('error sys.argv < 11!'+os.linesep)
        fp.close()
        return

    srv_ip = sys.argv[2]

    arg_tmp = sys.argv[6]+',cmd:'+sys.argv[10]
    fp.write(arg_tmp+os.linesep)
    srv_state = state_svr(sys.argv[4])

    mail = sys.argv[7]
    mail_addr = mail.split(',')

    last_state_chg = int(sys.argv[8])

    arg9 = sys.argv[9]
    mobilelist = arg9.split(',')

    mail_subject = sys.argv[1]+','+srv_ip+','+sys.argv[5]+','+sys.argv[4]
    #print arg_tmp
    svr_output = arg_tmp.split('\\n')
    
    # parse command line arg
    arg_list = arg_parse(svr_output)

    # read db.ini file
    db_conf = read_ini()
    if not db_conf:
        fp.write('read db.ini failed!'+os.linesep)
        fp.close()
        return
    fp.write('read db.ini suss!'+os.linesep)
    # connect mysql server
    conn = MySQLdb.Connection(host=db_conf[0], port=db_conf[1],user=db_conf[2], passwd=db_conf[3], db=db_conf[4])
    if not conn.open:
        fp.write('mysql connect failed!'+os.linesep)
        fp.close()
        return
    conn.select_db(db_conf[4])
    cur = conn.cursor()
    fp.write('mysql connect ret = '+str(conn.open)+os.linesep)
    # set charset = utf8
    cur.execute("SET NAMES utf8")
    #cur.execute("SET CHARACTER_SET_CLIENT=utf8")
    #cur.execute("SET CHARACTER_SET_RESULTS=utf8")
    conn.commit()

    # get current time
    cur_time = time.time()*1000
    g_server = {'name':'mail.17guagua.com','user':'ggmonitor@17guagua.com','passwd':r'\b=DS/7H'}
    g_fro     = 'ggmonitor@17guagua.com'

    g_subject = '联通'+mail_subject
    fp.write(g_subject+os.linesep)
    if len(arg_list) == 0:
        alarm_desc = arg_tmp.decode('utf-8').encode('utf-8') 
        t_server_alarm_log = "INSERT INTO t_service_alarm_log(service_id,server_type,service_ip,alarm_type,alarm_desc,alarm_time,store_time,last_state_change) \
        VALUES (%d,%d,'%s',%d,'%s',%d,%d,%d)" % (0,0,srv_ip,srv_state,alarm_desc,cur_time,cur_time,last_state_chg)
        cur.execute(t_server_alarm_log)
        fp.write('insert t_service_alarm_log suss!\n')
        # commit insert op
        conn.commit()
        
        # send warning mail
        send_mail(g_server,g_fro,mail_addr,g_subject,alarm_desc)        
        fp.write('sendmail suss!\n')
    # insert t_server_alarm_log
    for arg in arg_list:
        #fp.write('arg='+arg+',')
        alarm_type = int(arg[0])
        service_type = int(arg[1])
        service_id = int(arg[2])
        alarm_desc = '联通机房检测到异常:\n' + arg[3].decode('utf-8').encode('utf-8')
        
        t_server_alarm_log = "INSERT INTO t_service_alarm_log(service_id,server_type,service_ip,alarm_type,alarm_desc,alarm_time,store_time) \
        VALUES (%d,%d,'%s',%d,'%s',%d,%d)" % (service_id,service_type,srv_ip,alarm_type,alarm_desc,cur_time,cur_time)
        cur.execute(t_server_alarm_log)
        fp.write('insert t_service_alarm_log suss!\n')
        # commit insert op
        conn.commit()

        # send warning mail
        send_mail(g_server,g_fro,mail_addr,g_subject,alarm_desc)        
        fp.write('send_mail suss!\n')
    # close mysql server
    cur.close()
    conn.close()

    # send sms
    for mobile in mobilelist:
        msg_list = [mobile,g_subject]
        msg = ','.join(msg_list)
        send_sms(mobile,msg)

    fp.write('send sms suss!\n')
    fp.close()

if __name__ == '__main__':
    main()

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python脚本email

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python脚本email

#!/usr/bin/python# -*- coding: utf-8 -*-import sysimport reimport stringimport osimport timeimport httplibimport urllibi
2023-01-31

python smtplib发email

#!/usr/bin/env python#coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header import Head
2023-01-31

python脚本

# -*- coding: utf-8 -*-import sysuser = "wangru"counter = 0while True:    if counter < 3:                    name = raw_
2023-01-31

Python脚本sendmail

#!/usr/bin/python# -*- coding: utf-8 -*-import pyodbcimport pprintimport redisimport urllibimport jsonimport sysimport s
2023-01-31

Python模块学习--email

可以使用Python的email模块来实现带有附件的邮件的发送。SMTP (Simple Mail Transfer Protocol)  邮件传送代理 (Mail Transfer Agent,MTA) 程序使用SMTP协议来发送电邮到接
2023-01-31

Python 脚本编写

学习内容:Python 安装和环境设置运行和修改 Python 脚本与用户输入交互处理异常读写文件导入本地、标准和第三方模块在解释器中进行实验检查计算机是否安装了 Python ?在终端窗口输入如下指令,并按回车python --versi
2023-01-31

python脚本练习

题目: 在目录xx下,有xx个普通文件,有的文件有后缀名*.txt,有的则没有后缀名,写一个脚本将xx目录下所有文件没有后缀名的文件都重命名为*.txt结尾思考:知识点:需要用到python的os模块代码:importosdefis_fi
2023-01-30

python脚本之paramiko

#############################################################安装paramiko[root@LVS1 ~]# yum install gcc[root@LVS1 ~]#tar -
2023-01-31

python脚本备份

#!/usr/bin/python#encodeing:utf-8import osimport timeimport string#需要备份的目录source = ['/usr/local/nagios','/var/www/html/c
2023-01-31

python脚本记录

#!/usr/bin/env pythoni = 0n = input('please input number:')while i <= n :   i += 1   print i*'*'   #!/usr/bin/env python
2023-01-31

python 实用脚本

1.用python实现一个查看某网段所有主机的状态(3秒实现)#vim ping.pyimport subprocessimport threadingdef ping(host):    result = subprocess.call(
2023-01-31

简单python脚本

简单python脚本:注:1、python 变量不需要$2、for里面的print需要前空2格3、range(2,9)不包括9#!/usr/bin/pythoni=5print ii=i+1print ia=6b=5c=a * bprint
2023-01-31

[python] 转换python脚本程

方法1:freeze.py 来自python源码树.安装pythonbrew,可安装定制化的独立python环境(略)python trunk/Tools/freeze/freeze.py ./pkgdep.py之后make即可。问题:如果
2023-01-31

python版本DDOS攻击脚本

今天为了休息下,换换脑子,于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了。附上源码pyDdos.py:#!/usr/bin/env pythonimport socketimport
2023-01-31

jenkins执行python脚本

最新在研究使用jenkins做升级发布功能,大概的操作是选择产品、模块、环境等参数后,执行一个python脚本,脚本获取用户选择参数,然后执行发布动作。jenkins执行python脚本,需要使用python plugin具体使用方法:1、
2023-01-31

常见的Python脚本

1、冒泡排序lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58]def sortport(): for i in range(len(lis)-1): for j in
2023-01-30

python备份mysql脚本

今天简单的写了个python的mysql备份脚本,其实也不是很难呀。比shell简洁了很多!  开整:  注释都用英文写了,有些英语基础的朋友应该都可以看得懂了!#!/usr/bin/env python#backup the gtshop
2023-01-31

Python 发送 email 的三种方

Python发送email的三种方式,分别为使用登录邮件服务器、使用smtp服务、调用sendmail命令来发送三种方法原文请参见米扑博客:Python 发送 email 的三种方式Python发送email比较简单,可以通过登录邮件服务来
2023-01-31

python脚本生成html

#-*- coding: utf-8 -*-from pyh import *CONST_LIST = [ ['1','AAA','100','100','100','300'],               ['2','BBB','99'
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录