python发邮件模板

代码模板

# -*- coding: utf-8 -*-
"""
Created on Thu Apr  9 09:57:43 2020

@author: Administrator
"""

from pyhive import presto
import os
import pandas as pd
import warnings
from smtplib import SMTP_SSL
from email.header import Header
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import numpy as np
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email import encoders



warnings.filterwarnings("ignore")
######设置工作目录
os.chdir(r'C:\Users\Administrator\Documents\python\贷前监控')

conn = presto.connect(host = '000.00.0.00', port=8888, username='username',catalog='hive')

#流入口径的目标
sql1 = '''
SELECT
	to_char(t1.data_date,'yyyy-mm') month_d
	,t1.data_date
	,DATE_ADD('day',  -DAY_OF_WEEK(t1.data_date) +1 , t1.data_date) week_d
	,t1.product_type
	,case when  t1.IsReapply = '首贷'  then    t1.CHANNEL  else  '复贷' end  as  CHANNEL
		,case when  t1.IsReapply = '首贷'  then    t1.CHANNEL_type  else  '复贷' end  as  CHANNEL_type
	,t1.capital_side
	,t1.IsReapply
	,t1.MOB 
	,case when t1.should_amt <=400 then '400'
			  when t1.should_amt <=600 then '600'
			  when t1.should_amt <=800 then '800'
			  when t1.should_amt <=1200 then '1200'
			  else '>1200' end as   amt_level
	,sum(should_amt)              should_amt
	,sum(over_due_amt)            overdue_amt
	,sum(should_cnt)              should_cnt
	,sum(over_due_cnt)            overdue_cnt
	,sum(t3_repay)                t3
	,sum(t7_repay)                t7
	,sum(t7_acct)                 t7_acct   ---7天未还案件数
	,sum(t7_call)                 t7_call   ---7天未还案件拨打次数
	,sum(t7_con_call)             t7_con_case_cnt ---t7未还案件接通案件
	,sum(t7_con_other_call)       t7_con_other_case_cnt ---t7未还案件三方接通案件
	,sum(t7_con_br_call)       t7_con_br_case_cnt ---t7未还案件本人接通案件
	,sum(t7_call_time)            t7_call_time   ---t7拨打时间
from urge_tmp.temp_hh_repay_lid  t1
left join  urge_tmp.temp_hh_tel_record_dq  t2
on  t1.acct_no = t2.acct_no   and t2.data_date>=t1.data_date
where to_char(t1.data_date,'yyyy-mm')  >= '2019-12'
group by 1,2,3,4,5,6,7,8,9,10
order by 1
'''
df = pd.read_sql_query(sql1, conn)
df.columns = ['月','时间','周','产品','渠道','渠道类型','资金方',
              '首复贷','MOB','amt_level',
              '应还金额','逾期金额','应还笔数','逾期笔数',
'T3回收金额','T7回收金额','T7未还案件','T7未还案件拨打次数','T7未还案件接通量',
'T7未还案件三方接通量','T7未还案件本人接通量','T7未还案件拨打时长']
#df['时间'] = df['时间'].apply(lambda x: x[5:10])
#df['周'] = df['周'].apply(lambda x: x[5:10])

for i in df.columns[10:]:
    df[i] = df[i].astype(float)

def trans_data(df,index):    
    df_1 = df.pivot_table(index= index,
    values=['逾期笔数','逾期金额','T3回收金额','T7回收金额','T7未还案件', 'T7未还案件接通量', 'T7未还案件本人接通量'
    			, 'T7未还案件三方接通量', 'T7未还案件拨打次数', 'T7未还案件拨打时长','应还金额'],aggfunc = 'sum').sort_index(by=index)
    
    df_1['T0'] = df_1['逾期金额']/df_1['应还金额']
    df_1['T3'] = (df_1['逾期金额'] - df_1['T3回收金额'])/df_1['应还金额']
    df_1['T7'] = (df_1['逾期金额'] - df_1['T7回收金额'])/df_1['应还金额']
    df_1['T3催回率'] = df_1['T3回收金额']/df_1['逾期金额']
    df_1['T7催回率'] = df_1['T7回收金额']/df_1['逾期金额']
    df_1['T7触达率'] = df_1['T7未还案件接通量']/df_1['T7未还案件']
    df_1['T7本人触达'] = df_1['T7未还案件本人接通量']/df_1['T7未还案件']
    df_1['T7三方触达'] = df_1['T7未还案件三方接通量']/df_1['T7未还案件']
    df_1['T7案均拨打次数'] = df_1['T7未还案件拨打次数']/df_1['T7未还案件']
    df_1['T7案均拨打时长'] = df_1['T7未还案件拨打时长']/df_1['T7未还案件']
    df_1 = df_1.fillna(0)
    for i in ['T0','T3','T7','T3催回率','T7催回率','T7触达率','T7本人触达','T7三方触达']:
        df_1[i] = df_1[i].apply(lambda x: '%.2f%%'%(x*100))
    for i in ['T7案均拨打次数','逾期笔数','T7案均拨打时长','T7未还案件']:
        df_1[i] = df_1[i].astype(int)
    df_2 = df_1[['逾期笔数','T7未还案件','T0', 'T3', 'T7','T7催回率','T7触碰率','T7本人触碰',
				'T7三方触碰','T7案均拨打次数','T7案均拨打时长']]
    return df_2

df_mob1 = df[df['MOB']=='MOB1']   # mob1
df1_fd = df_mob1[df_mob1['渠道类型'].isin(['其他渠道', '首贷主要渠道'])] # 首贷MOB1
df1_sd = df_mob1[df['首复贷'] == '首贷'] # 复贷MOB1
df1_xqd = df_mob1[df['渠道类型'] == '新渠道'] # 新渠道MOB1
df1_xxl = df_mob1[df['渠道类型'] == '信息流'] # 信息流MOB1

####周
#MOB1复贷
MOB1_fd = trans_data(df1_fd,'周')
MOB1_fd = MOB1_fd.iloc[-6:-1,:]
#MOB1首贷
MOB1_sd = trans_data(df1_sd,'周')
MOB1_sd = MOB1_sd.iloc[-6:-1,:]
#MOB1新渠道
MOB1_xqd = trans_data(df1_xqd,'周')
MOB1_xqd = MOB1_xqd.iloc[-6:-1,:]
#MOB1信息流
MOB1_xxl = trans_data(df1_xxl,'周')
MOB1_xxl = MOB1_xxl.iloc[-6:-1,:]

filename = r'C:\Users\Administrator\Documents\python\贷前监控\detail.xlsx'
df.to_excel(filename,encoding = 'utf-8')


mailtext = u"""
<!DOCTYPE html>
<html>
<meta charset="utf-8">

    <p style="font-size:20px;color:#A7C942;font-family:Microsoft YaHei">各位好,本邮件为贷前T7监控邮件,具体的数据明细详见附件Detail<br></p>
    <style type="text/css">
    table 
      {
      font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
      width:100%%;
      border-collapse:collapse;
      }
      
<style type="text/css">
table
  {
  font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
  width:100%%;
  border-collapse:collapse;
  }

table td, table  th
  {
  font-size:12px;
  border:1px solid #98bf21;
  text-align:right;
  padding:2px 3px 2px 3px;
  }

table  th
  {
  font-size:12px;
  text-align:center;
  padding-top:5px;
  padding-bottom:4px;
  background-color:#EAF2D3;
  color:#000000;
  }

table tr.alt td
  {
  color:#000000;
  text-align:right;
  background-color:#EAF2D3;
  }
</style>
       <body>
       <p style="font-size:16px;font-weight:bold">注:以下关于催收的过程指标均是针对T7未还案件的</p>
        <p style="font-size:16px;font-weight:bold">1:复贷MOB1近5周T7表现%s</p>
       
        <!-- img src="cid:fig" alt="dns配置"   -->
       
        <p style="font-size:16px;font-weight:bold">2:首贷MOB1近5周T7表现%s</p>
        <p style="font-size:16px;font-weight:bold">3:新渠道MOB1近5周T7表现%s</p>
        <p style="font-size:16px;font-weight:bold">4:信息流MOB1近5周T7表现%s</p>

         </body>
        <br>
        </html> """ \
        % (MOB1_fd.to_html(index=True),MOB1_sd.to_html(index=True),\
        MOB1_xqd.to_html(index=True),MOB1_xxl.to_html(index=True))
              
mailInfo = {
        "from": "",
        "to":"***.com,****.com",
        "cc": "",
        "hostname": "邮箱配置",
        "username":"****",
        "password":"***",
        "mailsubject":"助贷目标监控",
        "mailtext": u"邮件正文",
        "mailencoding": "utf-8"
    }

if __name__ == '__main__':
    htm = MIMEText(mailtext, 'html', 'utf-8')
    msg = MIMEMultipart()    
    msg.attach(htm) 
    #---------------------设置附件-------------------------#
    file_name = filename
    contype = 'application/octet-stream'
    maintype, subtype = contype.split('/', 1)
    data = open(file_name, 'rb')
    file_msg = MIMEBase(maintype, subtype)
    file_msg.set_payload(data.read( ))
    data.close()
    encoders.encode_base64(file_msg)
    ## 设置附件头
    basename = os.path.basename(file_name)
    file_msg.add_header('Content-Disposition','attachment', filename = basename)
    msg.attach(file_msg)
    #---------------------------附件设置完毕--------------------#
         
try:
        smtp = SMTP_SSL(mailInfo["hostname"])
        smtp.set_debuglevel(0)
        smtp.ehlo(mailInfo["hostname"])
        smtp.login(mailInfo["username"], mailInfo["password"])
        msg["Subject"] = Header(mailInfo["mailsubject"], mailInfo["mailencoding"])
        msg["from"] = mailInfo["from"]
        msg["to"] = mailInfo["to"]
        msg['cc'] = mailInfo["cc"]
        smtp.sendmail(mailInfo["from"], mailInfo["to"].split(","), msg.as_string())
        smtp.quit()
        print('success-test')
except Exception as e:
        print('Exception: ', e)

邮件格式显示
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值