dataworks python邮件发送

本文介绍了一个用于自动化发送视频内容数据日报的Python脚本。该脚本能够从数据库获取前一天的相关数据,如播放次数、完播率等,并通过HTML表格的形式进行整理。随后将整理好的数据通过邮件发送给指定的接收者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码:

# @Time : 2022-05-27 11:19
# @Author :  huxintao
# @Site : kaishustory.com
# 脚本迁移修改时间:2022-12-16
# 脚本迁移修改人:wangxuetao
"""
视频数据日报,自动邮件发送程序
"""
import importlib,sys 
importlib.reload(sys)
#修改系统默认编码。
#sys.setdefaultencoding('utf8')
import datetime, base64
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
from HTMLTable import HTMLTable
# import com.kinlin.aliyun.util.PhoneUtils as phoneUtil

def send_email(html, date):
    sender = "****@****.com"
    code = "****"
    server = '****.****.qq.com:****'
 
    receiver = ['****@****.com']
    #cc = ['bigdata@ksjgs.com']

     
    cc = []

    # 构造邮件body
    message = MIMEMultipart("alternative", None, [MIMEText(html, 'html')])
    message['Subject'] = '视频内容数据日报-' + date
    message['From'] = sender
    message['To'] = ",".join(receiver)
    message['Cc'] = ",".join(cc)
    print('---------message构建成功---------')

    # 发送动作
    server = smtplib.SMTP_SSL(server)
    server.ehlo()
    server.login(sender, code)
    server.sendmail(sender, receiver + cc, message.as_string())
    server.quit()
    print('---------发送完成---------')

if __name__ == '__main__':
    yesterday = (datetime.date.today() + datetime.timedelta(-1)).strftime("%Y-%m-%d")

    column1 = ("日期", "播放次数", "完播率", "售卖单数", "收入")

    with o.execute_sql('select  dt, album_play_cnt, concat(round(album_finish_play_rto * 100, 2), "%") as album_finish_play_rto , order_cnt, amt from kaishu_bigdata.ads_xzs_car_city_play_order_sum_di where dt=date_sub(current_date(),1)').open_reader() as reader4:
    
        rows = reader4.raw.split('\n')
        #['"dt","album_play_cnt","album_finish_play_rto","order_cnt","amt"', '"2022-12-14",1296,"52.62%",3.0,75.0', '']
        print(rows[0:10])
        l = []
        for row in rows:
            new_str = row.replace('"', '')
            new_str.split(",")
            t = tuple(new_str.split(","))
            l.append(t)
            #('dt', 'album_play_cnt', 'album_finish_play_rto', 'order_cnt', 'amt')
            #('2022-12-14', '1296', '52.62%', '3.0', '75.0')
            #('',)
            print(t)
        del l[0]
        l.pop()
        res_data = tuple(l)
        print(res_data)
        #(('2022-12-14', '1296', '52.62%', '3.0', '75.0'),)
    

    l1 = len(res_data)

    # 判断当天是否有数据
    if len(column1) == 0:
        column1 = (('没有统计到昨日数据'))
    # 创建报表
    table = HTMLTable(caption='汽车城大冒险每日数据')

    # 创建报表header
    table.append_header_rows((
        # ("日期", "播放次数", "完播率", "售卖单数", "收入"),
        column1,
    ))

    # 添加td
    table.append_data_rows(res_data)

    # 设置字体大小
    table.caption.set_style({
        'font-size': '16px',
    })

    table.set_style({
        'border-collapse': 'collapse',
        'word-break': 'keep-all',
        'white-space': 'nowrap',
        'font-size': '14px',
    })

    table.set_cell_style({
        'border-color': '#A9A9A9',
        'border-width': '1px',
        'border-style': 'solid',
        'padding': '5px',
    })

    # 表头样式
    table.set_header_row_style({
        # 'color': '#fff',
        'background-color': '#D3D3D3',
        'font-size': '14px',
    })
    # 覆盖表头单元格字体样式
    table.set_header_cell_style({
        'padding': '10px',
    })

    html = table.to_html()
    # 四张表拼接html
    if res_data != () :
        send_email(html, yesterday)

    else:
        phoneUtil.call_phone("视频邮件发送失败,失败原因,视频引用报表数据异常,请及时核对")
        phoneUtil.call_ding(
            "视频邮件发送失败\n\n失败原因,视频引用报表数据异常,请及时核对\n\n汽车城大冒险每日数据:%s" % (
                l1), 1)
        phoneUtil.call_feishu(
            "视频邮件发送失败\n\n失败原因,视频引用报表数据异常,请及时核对\n\n汽车城大冒险每日数据:%s" % (
                l1), 1)

邮件:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值