现在的位置: 首页 > 综合 > 正文

python mail脚本应用

2013年09月04日 ⁄ 综合 ⁄ 共 5735字 ⁄ 字号 评论关闭

http://blog.csdn.net/jrckkyy/archive/2010/03/12/5373427.aspx

 

前一阵花了点时间学习python,近段时间完成了一个监控服务器基本信息的项目,都是为了满足大家监控的欲望,特殊日志并报警的分布式系统,单台服务器采集粒度为1次/1分钟,一天大约1440条,目前监控了20多台服务器,一天大约31680条日志,现在单点监控中心服务器在性能上还绰绰有余,有更多的服务器来测试就好了,估计可以支持到100台以上服务器监控的级别。

现在遇到一个需求是发现报警时实时发送消息给相关人员,由于公司短信网关只买了上海电信用户没有上海电信的号码,汗一个,只好通过发邮件来实施。

支持发送GB18030编码的文本内容,任意编码附件,可以做出适当修改支持群发。

#coding=utf-8  
#!/usr/lib/python2.5/bin/python  
import os  
import sys  
from smtplib import SMTP  
from email.MIMEMultipart import MIMEMultipart  
from email.mime.application import MIMEApplication  
from email.MIMEText import MIMEText  
from email.MIMEBase import MIMEBase  
from email import Utils,Encoders  
import mimetypes  
import time  
 
STMP_SERVER = "mail.×××.com" 
STMP_PORT = "25" 
USERNAME = "×××@×××.com
USERPASSWORD = "×××" 
FROM = "MonitorCenterWarning@×××.com
TO = "×××@gmail.com
 
def sendFildByMail(config):  
    print 'Preparing...' 
    message = MIMEMultipart( )  
    message['from'] = config['from']  
    message['to'] = config['to']  
    message['Reply-To'] = config['from']  
    message['Subject'] = config['subject']  
    message['Date'] = time.ctime(time.time())  
    message['X-Priority'] =  '3' 
    message['X-MSMail-Priority'] =  'Normal' 
    message['X-Mailer'] =  'Microsoft Outlook Express 6.00.2900.2180' 
    message['X-MimeOLE'] =  'Produced By Microsoft MimeOLE V6.00.2900.2180' 
      
    if 'file' in config:  
        #添加附件  
        f=open(config['file'], 'rb')  
        file = MIMEApplication(f.read())  
        f.close()  
        file.add_header('Content-Disposition', 'attachment', filename= os.path.basename(config['file']))  
        message.attach(file)  
      
    if 'content' in config:  
        #添加文本内容  
        f=open(config['content'], 'rb')  
        f.seek(0)  
        content = f.read()  
        body = MIMEText(content, 'base64', 'gb2312')  
        message.attach(body)  
 
    print 'OKay' 
    print 'Logging...' 
    smtp = SMTP(config['server'], config['port'])  
    #如果SMTP服务器发邮件时不需要验证登录则对下面这行加上注释  
    smtp.login(config['username'], config['password'])  
    print 'OK' 
      
    print 'Sending...',  
    smtp.sendmail (config['from'], [config['from'], config['to']], message.as_string())  
    print 'OK' 
    smtp.close()  
    time.sleep(1)  
 
if __name__ == "__main__":  
    if len(sys.argv) < 2:  
        print 'Usage: python %s contentfilename' % os.path.basename(sys.argv[0])  
        print 'OR Usage: python %s contentfilename attachfilename' % os.path.basename(sys.argv[0])  
        wait=raw_input("quit.")  
        sys.exit(-1)  
    elif len(sys.argv) == 2:  
        sendFildByMail({  
            'from': FROM,  
            'to': TO,  
            'subject': '[MonitorCenter]Send Msg %s' % sys.argv[1],  
            'content': sys.argv[1],  
            'server': STMP_SERVER,  
            'port': STMP_PORT,  
            'username': USERNAME,  
            'password': USERPASSWORD})  
    elif len(sys.argv) == 3:  
        sendFildByMail({  
            'from': FROM,  
            'to': TO,  
            'subject': '[MonitorCenter]Send Msg and File %s %s' % (sys.argv[1], sys.argv[2]),  
            'content': sys.argv[1],  
            'file': sys.argv[2],  
            'server': STMP_SERVER,  
            'port': STMP_PORT,  
            'username': USERNAME,  
            'password': USERPASSWORD})  
    wait=raw_input("end.") 
#coding=utf-8
#!/usr/lib/python2.5/bin/python
import os
import sys
from smtplib import SMTP
from email.MIMEMultipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import Utils,Encoders
import mimetypes
import time

STMP_SERVER = "mail.×××.com"
STMP_PORT = "25"
USERNAME = "×××@×××.com"
USERPASSWORD = "×××"
FROM = "MonitorCenterWarning@×××.com"
TO = "×××@gmail.com"

def sendFildByMail(config):
    print 'Preparing...'
    message = MIMEMultipart( )
    message['from'] = config['from']
    message['to'] = config['to']
    message['Reply-To'] = config['from']
    message['Subject'] = config['subject']
    message['Date'] = time.ctime(time.time())
    message['X-Priority'] =  '3'
    message['X-MSMail-Priority'] =  'Normal'
    message['X-Mailer'] =  'Microsoft Outlook Express 6.00.2900.2180'
    message['X-MimeOLE'] =  'Produced By Microsoft MimeOLE V6.00.2900.2180'
   
    if 'file' in config:
        #添加附件
        f=open(config['file'], 'rb')
        file = MIMEApplication(f.read())
        f.close()
        file.add_header('Content-Disposition', 'attachment', filename= os.path.basename(config['file']))
        message.attach(file)
   
    if 'content' in config:
        #添加文本内容
        f=open(config['content'], 'rb')
        f.seek(0)
        content = f.read()
        body = MIMEText(content, 'base64', 'gb2312')
        message.attach(body)

    print 'OKay'
    print 'Logging...'
    smtp = SMTP(config['server'], config['port'])
    #如果SMTP服务器发邮件时不需要验证登录则对下面这行加上注释
    smtp.login(config['username'], config['password'])
    print 'OK'
   
    print 'Sending...',
    smtp.sendmail (config['from'], [config['from'], config['to']], message.as_string())
    print 'OK'
    smtp.close()
    time.sleep(1)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print 'Usage: python %s contentfilename' % os.path.basename(sys.argv[0])
        print 'OR Usage: python %s contentfilename attachfilename' % os.path.basename(sys.argv[0])
        wait=raw_input("quit.")
        sys.exit(-1)
    elif len(sys.argv) == 2:
        sendFildByMail({
            'from': FROM,
            'to': TO,
            'subject': '[MonitorCenter]Send Msg %s' % sys.argv[1],
            'content': sys.argv[1],
            'server': STMP_SERVER,
            'port': STMP_PORT,
            'username': USERNAME,
            'password': USERPASSWORD})
    elif len(sys.argv) == 3:
        sendFildByMail({
            'from': FROM,
            'to': TO,
            'subject': '[MonitorCenter]Send Msg and File %s %s' % (sys.argv[1], sys.argv[2]),
            'content': sys.argv[1],
            'file': sys.argv[2],
            'server': STMP_SERVER,
            'port': STMP_PORT,
            'username': USERNAME,
            'password': USERPASSWORD})
    wait=raw_input("end.")
 

windows xp下:

 

 linux ubuntu,suse下:

 

收到的结果:

 

 

抱歉!评论已关闭.