广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python脚本email
  • 608
分享到

Python脚本email

脚本Pythonemail 2023-01-31 01:01:49 608人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

#!/usr/bin/python# -*- coding: utf-8 -*-import sysimport reimport stringimport osimport timeimport Httplibimport urllibi

#!/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()

--结束END--

本文标题: Python脚本email

本文链接: https://www.lsjlt.com/news/183674.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python脚本email
    #!/usr/bin/python# -*- coding: utf-8 -*-import sysimport reimport stringimport osimport timeimport httplibimport urllibi...
    99+
    2023-01-31
    脚本 Python email
  • python smtplib发email
    #!/usr/bin/env python #coding: utf-8 import smtplib from email.mime.text import MIMEText from email.header...
    99+
    2023-01-31
    python smtplib email
  • python脚本
    # -*- coding: utf-8 -*- import sys user = "wangru" counter = 0 while True:     if counter < 3:                     ...
    99+
    2023-01-31
    脚本 python
  • Python脚本sendmail
    #!/usr/bin/python# -*- coding: utf-8 -*-import pyodbcimport pprintimport redisimport urllibimport jsonimport sysimport s...
    99+
    2023-01-31
    脚本 Python sendmail
  • Python模块学习--email
    可以使用Python的email模块来实现带有附件的邮件的发送。 SMTP (Simple Mail Transfer Protocol)   邮件传送代理 (Mail Transfer Agent,MTA) 程序...
    99+
    2023-01-31
    模块 Python email
  • python脚本之paramiko
    #############################################################安装paramiko[root@LVS1 ~]# yum install gcc[root@LVS1 ~]#tar -...
    99+
    2023-01-31
    脚本 python paramiko
  • python脚本记录
    #!/usr/bin/env python i = 0 n = input('please input number:') while i <= n :    i += 1    print i*'*'     #!/usr/bin/...
    99+
    2023-01-31
    脚本 python
  • 简单python脚本
    简单python脚本: 注:1、python 变量不需要$2、for里面的print需要前空2格3、range(2,9)不包括9 #!/usr/bin/python i=5print i i=i+1print i a=6b=5c=a * ...
    99+
    2023-01-31
    脚本 简单 python
  • python 实用脚本
    1.用python实现一个查看某网段所有主机的状态(3秒实现)#vim ping.pyimport subprocessimport threadingdef ping(host):    result = subprocess.call(...
    99+
    2023-01-31
    脚本 python
  • Python 脚本编写
    学习内容: Python 安装和环境设置 运行和修改 Python 脚本 与用户输入交互 处理异常 读写文件 导入本地、标准和第三方模块 在解释器中进行实验 检查计算机是否安装了 Python ? 在终端窗口输入如下指令,并...
    99+
    2023-01-31
    脚本 Python
  • python脚本备份
    #!/usr/bin/python #encodeing:utf-8 import os import time import string #需要备份的目录 source = ['/usr/local/nagios','/var/www/...
    99+
    2023-01-31
    脚本 备份 python
  • python脚本练习
    题目:   在目录xx下,有xx个普通文件,有的文件有后缀名*.txt,有的则没有后缀名,写一个脚本将xx目录下所有文件没有后缀名的文件都重命名为*.txt结尾思考:知识点:需要用到python的os模块代码:import&nbs...
    99+
    2023-01-30
    脚本 python
  • [python] 转换python脚本程
    方法1: freeze.py 来自python源码树. 安装pythonbrew,可安装定制化的独立python环境(略) python trunk/Tools/freeze/freeze.py ./pkgdep.py 之后make即可...
    99+
    2023-01-31
    脚本 python
  • python版本DDOS攻击脚本
    今天为了休息下,换换脑子,于是就找到了我之前收藏的一篇python的文章,是关于ddos攻击的一个脚本,正好今天有空,就实践下了。 附上源码pyDdos.py: #!/usr/bin/env python import socket i...
    99+
    2023-01-31
    脚本 版本 python
  • python备份mysql脚本
    今天简单的写了个python的mysql备份脚本,其实也不是很难呀。比shell简洁了很多!  开整:  注释都用英文写了,有些英语基础的朋友应该都可以看得懂了!#!/usr/bin/env python #backup the gtsho...
    99+
    2023-01-31
    脚本 备份 python
  • python 脚本学习(一)
    日志读取脚本功能:用于读取某日志文件,可指定某个匹配条件,返回文本中匹配到的该行和前面的n行。此脚本可以接受3个参数,分别是文件对象、搜索的关键词、返回匹配的该行前面的行数。 #!/usr/local/python27/bin/python...
    99+
    2023-01-31
    脚本 python
  • python如何写脚本
    python写脚本的方法在电脑中找到“idle”,他是Python自带的,通过idle进行编写。打开文本编辑器editplus,notepad等,编写后将文件保存成 .py格式即可。...
    99+
    2022-10-05
  • python脚本生成html
    #-*- coding: utf-8 -*- from pyh import * CONST_LIST = [ ['1','AAA','100','...
    99+
    2023-01-31
    脚本 python html
  • jenkins执行python脚本
    最新在研究使用jenkins做升级发布功能,大概的操作是选择产品、模块、环境等参数后,执行一个python脚本,脚本获取用户选择参数,然后执行发布动作。jenkins执行python脚本,需要使用python plugin具体使用方法:1、...
    99+
    2023-01-31
    脚本 jenkins python
  • python 监控mysql脚本
    #!/usr/bin/env python #-*- coding: UTF-8 -*- from __future__ import print_function from mysql import connector import lo...
    99+
    2023-01-31
    脚本 python mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作