python实现发送邮件功能

前一段时间实现了一个python脚本发送邮件的功能,该脚本是借用smtp服务器发送邮件,邮件以附件的形式发出,如果要添加正文,修改添加即可。

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

import smtplib, re, sys, os
import xlwt
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

def chuli_data(filepath):
    list1 = []
    with open(filepath) as fobj:
        for line in fobj:
            if re.match(".*\"_source\".*",line):
                list1.append([])
            if re.match(".*\"@timestamp\".*",line):
                tmp_value = re.findall(".*\"@timestamp\" *: *\"(.*)\" *",line)
                list1[-1].append(tmp_value[0])
            if re.match(".*\"servicetype\".*",line):
                tmp_value = re.findall(".*\"servicetype\" *: *\"(.*)\" *",line)
                list1[-1].append(tmp_value[0])
            if re.match(".*\"source\".*",line):
                tmp_value = re.findall(".*\"source\" *: *\"(.*)\" *",line)
                list1[-1].append(tmp_value[0])
            if re.match(".*\"logmsg\".*",line):
                tmp_value = re.findall(".*\"logmsg\" *: *\"(.*)\" *",line)
                list1[-1].append(tmp_value[0])
    for ele in list1:
        print ele
    return list1

def trans(str1):
    upperlist = string.uppercase
    str1 = int(str1)
    if str1 < 26:
        trans_str = upperlist[str1]
    else:
        par = int(str1/26)
        sub = str1 % 26
        trans_str = upperlist[sub]
        trans_str = trans(par) + trans_str
    return trans_str

def rewrite_xml(list1):
    wb = xlwt.Workbook()
    sheet = wb.add_sheet(‘error日志‘)
    ws = wb.active
    col_num = 1
    for row in list1:
        row_num = 0
        for col in row:
            ws[trans(row_num)+str(col_num)] = col
            row_num += 1
        col_num += 1
    wb.save("/tmp/tmp.xlsx")
    return True

def send_email(config_file,FROM,TO,xlsxfile_list,email_password):
    location_name="unknown"
    SUBJECT="error日志"
    with open(config_file) as fobj:
        for line in fobj:
            if re.match("<reports_subject>.*</reports_subject>",line):
                SUBJECT = re.search("<reports_subject>(.*)</reports_subject>",line).groups()[0]
                location_name = re.split("Scarlet",SUBJECT)[0]
                break
    location_name = "[%s]" % location_name.decode(‘utf-8‘)
    HOST = "smtp.ipanel.cn"
    SUBJECT = SUBJECT.decode(‘utf-8‘)
    missfile_list = []
    errfile_list = []
    inscribe = """<p>personal infomation<br>
your own description<br></p>"""

    for  file in xlsxfile_list:
        if not os.path.isfile(file):
            missfile_list.append(os.path.basename(file))

    if missfile_list:
        mail_head = """All:<br>
    &nbsp;&nbsp;&nbsp;&nbsp;附件是今日的errlog,请及时查收<br>
    &nbsp;&nbsp;&nbsp;&nbsp;此邮件为系统自动发送,请勿回复<br>
    <br>""" % ", ".join(missfile_list)
    else:
        mail_head = """<br>"""

    msg = MIMEMultipart(‘related‘)
    n = 1
    contents = "<font color=black>%s</font><br>" % mail_head
    for pngfile in pngfile_list:
        try:
            msg.attach(addimg(pngfile,"daily"+str(n)))
            contents += "<img src=\"cid:daily%s\" border=\"1\">" % n
            if n % 2 == 0:
                contents += "<br><br>"
        except Exception,e:
            errfile_list.append(os.path.basename(pngfile))
        finally:
            n += 1
    contents += inscribe
    msgtext = MIMEText(contents,"html","utf-8")
    msg.attach(msgtext)

    try:
        attach1 = MIMEText(open(xlsxfile_list[0],"rb").read(), "base64", "UTF-8")
        time_tag = "-".join(re.split("[_.]",xlsxfile_list[0])[-3:-1])
        attach1["Content-Type"] = "application/octet-stream"
        attach1["Content-Disposition"] = "attachment; filename=\"%s error日志 %s.xlsx\"" % (location_name.encode(‘utf-8‘),time_tag)
    except Exception,e:
        errfile_list.append(os.path.basename(xlsxfile_list[0]))    

    msg.attach(attach1)
    msg[‘Subject‘] = SUBJECT
    msg[‘From‘] = FROM
    msg[‘To‘] = ";".join(TO)

    try:
        server = smtplib.SMTP()
        server.connect(HOST,"25")
        server.login("[email protected]",email_password)
        server.sendmail(FROM, TO, msg.as_string())
        server.quit()
        print "邮件发送成功!"
        return True
    except Exception, e:
        print "失败:"+str(e)
        return False

if __name__ == ‘__main__‘:
    config_file = "/opt/Scarlet/elkerrlog/monitor_elk.conf"
    FROM = "[email protected]"
    TO = ["[email protected]"]
    FILELOG = "logfile.`date +%Y%m%d`"
    xlsxfile_list = [r"/opt/Scarlet/elkerrlog/$FILELOG"]
    email_password = "Scarlet_password"
    list1 = chuli_data(xlsxfile_list[0])
    rewrite_xml(list1)
    tmp_result = send_email(config_file,FROM,TO,/tmp/tmp.xlsx,email_password)
    if not tmp_result:
        sys.exit(1)
    sys.exit(0)
时间: 2024-10-13 16:39:24

python实现发送邮件功能的相关文章

Python django实现简单的邮件系统发送邮件功能

Python django实现简单的邮件系统发送邮件功能 本文实例讲述了Python django实现简单的邮件系统发送邮件功能. django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了.2.send_mail().send_mass_mail()都是对EmailMessage类使用方式的一个轻度封装,所以要关注底层的EmailMessage.3.异常处理防止邮件头注入.4.一定要弄懂Email backends 邮件发送后

Python 自动发送邮件

简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件.Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件. SMTP通讯的基本流程可以概括为以下几点: 1.连接SMTP服务器 2.登陆用户名和密码 3.发送指定邮件内容 4.退出SMTP连接 一.发送纯文本格式邮件 1 #coding:utf-8 2 import sys 3 reload(sys) 4 sys.setd

python模范发送邮件的时候,才smtp.connect的时候总是抛出错误

python发送邮件的时候,总是出现:[Errno 10060] 错误码 根据debug得到在connect的时候出错. 认真检查了下host,没有错呀~应该就是服务器的host. 查看了下网上的一些例子,发现qq的host举例:smtp.qq.com/smtp.163.com/smtp.162.com 于是觉得应该用smtp.+XXX.com来试一下~就可以解决了~ python模范发送邮件的时候,才smtp.connect的时候总是抛出错误,布布扣,bubuko.com

为python 添加新功能-dump

一直觉得thinkphp提供的dump函数挺好用的,但是python里面没有,就一直想着写个简单的. dir是我比较常用的一个内置函数了,但是显示效果实在有点受不了,每次我都要从大量的字符串里找到我需要的,眼都花了. 所以我就想,一行显示一个就好了. 所以我就写了一个模块,命名为dp 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 """ 5 dump variable 6 """ 7 def dump(v

java实现发送邮件功能

项目中实现发送邮件功能,先书写一个小Demo,记录如下: POM.XML中导入依赖 <!-- start java 提供的支持邮件发送相关业务的类 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <!-- end

Python 实现摄像头功能

正确的程序如下所示: #! /usr/bin/env python # -*- coding: utf-8 -*- from VideoCapture import Device import time import sys,pygame pygame.init() size = width,height = 620,485 speed = [2,2] black = 0,0,0 pygame.display.set_caption('视频窗口') screen = pygame.display

DEDECMS会员注册如何配置邮箱发送邮件功能

网站邮件功能是一个非常基础和有效的通信工具,配合dede会员注册邮件验证功能可以大量的拒绝垃圾注册用户.那么如何配置DEDECMS会员注册邮箱发送邮件功能? 1:配置dedecms网站发信EMAIL 登录dede管理后台->系统->系统基本参数设置->核心设置->选择“网站发信EMAIL:”输入你的发信邮箱,本演示教程使用QQ邮箱来示范——[email protected](说明:防止垃圾邮件的骚扰,@符号将用*替换),详细见下图: 2:配置dedecms发信邮件smtp参数 设置

Redmine发布新闻,自动发送邮件功能失效恢复

问题描述:操作数据库,修改项目公开状体后,创建新闻,自动发送邮件功能失效. 问题检查和恢复测试: 1.检查管理员权限 2.重新手动配置项目公开状态,覆盖数据操作 3.对比其他正常项目数据库状态,进行恢复. 恢复结果: 原文地址:https://www.cnblogs.com/YatHo/p/8341096.html

python之发送邮件~

在之前的工作中,测试web界面产生的报告是自动使用python中发送邮件模块实现,在全部自动化测试完成之后,把报告自动发送给相关人员 其实在python中很好实现,一个是smtplib和mail俩个模块来实现,主要如下: import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBaseimport