Python发送邮件带excel表格附件

#创建excel表格并写入数据 

import xlwt

keys = [['1','小明','21'],['2','小红','19']]  #定义需要写进表中得值

def Excel(keys):  
    book = xlwt.Workbook(encoding='utf-8',style_compression=0)  #创建excel表格类型文件 这里是’utf-8’的形式,style_compression设置是否压缩,不是很常用,赋值为0表示不压缩。
    sheet = book.add_sheet('自定义sheet名称',cell_overwrite_ok=True) #在excel表格类型文件中建立一张sheet表单 参数cell_overwrite_ok用于确认同一个cell单元是否可以重设值,这里赋值为True就表示可重设值
    col = ('ID','名称','年龄')  #自定义列名
    le = len(col)
    for y in range(0,le):  #将列属性元组col写进sheet表单中
        sheet.write(0,y,col[y])  #行,列,值
    length = len(keys)
    for y in range(0,length): #同上意思
        data = keys[y] #依次取出列表得值
        for i in range(0,le):
            sheet.write(y+1,i,data[i]) #行+1 值需要从第二行开始写
    book.save('/app/py/Public_Cloud.xls') #文件存储路径 xls名称自定义

#在表格创建多个sheet

import xlrd
from xlutils.copy import copy as xl_copy

a_list = ['','','','',''...] #按自己情况而定 

def Excel1(a_list):
    rb = xlrd.open_workbook('/app/py/Public_Cloud.xls', formatting_info=True)  #打开现有表格
    wb = xl_copy(rb)  #复制一份
    ali_Sheet = wb.add_sheet('自定义sheet名称')  #新增一个sheet表单
    col = ('实例ID','实例名称','运行状态','CPU','内存') #最好跟值得长度一样
    le = len(col)
    for y in range(0,le):
        ali_Sheet.write(0,y,col[y])
    length = len(a_list)
    for y in range(0,length):
        data = a_list[y]
        for i in range(0,le):
            ali_Sheet.write(y+1,i,data[i])
    wb.save('/app/py/Public_Cloud.xls')

# 引入模块 发送邮件带xls文件附件

import logging
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart


def mail():
    ret = True
    #发信方的信息:发信邮箱,QQ邮箱授权码
    from_addr = 'test@xxx.com'
    password = 'pass密码'
    #收信方邮箱 使用列表可一个或多个
    to_addrs =[ 'h-xxx@xxx.com','h-xxx@xxx.com','h-xxx@xxx.com']
    #抄送邮件
    cc_list = ['xxx@xxx.com','xxx@xxx.com','xxx@xxx.com']
    #发信服务器
    smtp_server = 'email.smtp.com'
    # 创建一个带附件的邮件实例
    message=MIMEMultipart()
    #邮箱正文内容,第一个参数为内容
    text = '消息通知'
    mail_inside = MIMEText(text,'plain','utf-8')             #传入文本,文本类型(plain)、文本编码
    #设置邮件头信息
    message['From'] = Header(from_addr)
    message['TO'] = Header(",".join(to_addrs))    #因为是多个邮件,所以需要用join
    message['Cc'] = Header(",".join(cc_list))
    message['Subject'] = Header('【主机备份巡检】公有云主机备份巡检')
    message.attach(mail_inside)                   #传入邮件正文的内容
    #构造附件xls附件1 open(xls文件位置)
    attr1=MIMEText(open('/app/py/Public_Cloud.xls','rb').read(),'base64','utf-8')
    attr1["content_Type"]='application/octet-stream'
    attr1["Content-Disposition"] = 'attachment; filename="Public_Cloud.xls"'  # 表示这是附件  filename可以自定义 邮件中显示的name
    message.attach(attr1)
    try:
        #开启发信服务,这里使用的是非加密传输
        server = smtplib.SMTP(smtp_server,25)
        #登录发信邮箱
        server.login(from_addr,password)
        #发送邮件
        server.sendmail(from_addr,to_addrs,message.as_string())
        #关闭服务器
        server.quit()
    except smtplib.SMTPException as e:
        print('error',e)
    return ret
if __name__ == "__main__":
    Excel(keys)
    Excel1(a_list)
    ret = mail()
    if ret:
        print("邮件发送成功,脚本运行结束.")
    else:
        print("邮件发送失败,脚本运行结束.")


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值