python生成CSV文件並發送郵件


一、前言

  在日常運維的過程中,執行腳本,生成excel報表並發送郵件到郵箱是不可避免的,python生成excel的庫有很多,這里選擇生成csv格式,因為python內置,不需要額外安裝模塊,而且使用簡單。

二、生產CSV代碼

# encoding: utf-8
import codecs
import csv
import datetime

import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
def to_csv(datas, env):
    headers = ['ip', u'操作系統', u'分區屬性', u'輸出返回', u'執行結果']
    # newline=''避免出現空行
    today = datetime.date.today()
    filename = "{}-{}.csv".format(env, today)
    try:
        with open(filename, 'wb') as f:
            f.write(codecs.BOM_UTF8)
            # 標頭在這里傳入,作為第一行數據
            writer = csv.DictWriter(f, headers)
            writer.writeheader()
            writer.writerows(datas)
    except Exception as e:
        print (u'寫入csv錯誤:' + str(e))
    finally:
        return filename


if __name__ == '__main__':
    data = [{"ip": "192.168.1.2", u'操作系統': "LINUX", u'分區屬性': u"x86物理機", u'輸出返回': "ok", u'執行結果': u"成功"},
            {"ip": "192.168.1.3", u'操作系統': "LINUX", u'分區屬性': u"x86物理機", u'輸出返回': "error:xxxxxxxxxxx", u'執行結果': u"成功"},
            {"ip": "192.168.1.4", u'操作系統': "LINUX", u'分區屬性': u"x86虛擬機", u'輸出返回': "ok", u'執行結果': u"成功"},
            {"ip": "192.168.1.5", u'操作系統': "LINUX", u'分區屬性': u"x86虛擬機", u'輸出返回': "ok", u'執行結果': u"成功"}]
    env = "dev"
    to_csv(data, env)

生成的文件:

 

 

二、發送郵件代碼

from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_email(filename):
    # 發送郵箱服務器
    smtpserver = 'xx.xx.xx.xx'
    # 發送郵箱用戶名密碼
    user = 'xxxxxxx@xx.com.cn'
    password = '5tgb^YHN'
    # 發送和接收郵箱
    receives = ['xxxxx@xxx.com.cn']

    msg = MIMEMultipart()  # 創建一個帶附件的實例
    subject = Header("xxxxxx執行結果", 'utf-8').encode()
    msg["Subject"] = subject  # 指定郵件主題
    msg["From"] = user  # 郵件發送人
    msg["To"] = ','.join(receives)  # 郵件接收人,如果存在多個收件人,可用join連接
    msg.attach(MIMEText('附件為xxxxx執行結果,請查收!', _subtype='html', _charset='utf-8'))
    part = MIMEApplication(open(filename, 'rb').read())
    part.add_header('Content-Disposition', 'attachment', filename=filename)
    msg.attach(part)

    try:
        s = smtplib.SMTP(smtpserver, timeout=10)  # 連接smtp郵件服務器,端口默認是25
        s.login(user, password)  # 登陸服務器
        s.sendmail(user, receives, msg.as_string())  # 發送郵件
        s.close()
    except Exception as e:
        print ("send email error:"+str(e))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM