python发送含有多个变量的网页正文邮件

    接上文,我们在接到自动化需求后,需要把hivesql语句跑出,然后把结果下载下来做成日报并发送给领导,这里就有领导们要求的格式,我们需要用网页语言模仿表格格式,将每日报表呈现出来。

    因为上次是直接导出到csv格式,所以需要使用pandas包读取csv文件,另外如果要使用python发送邮件,还需要加载email、smtplib包,所有这些都准备完毕了之后,正文中还需要对日期进行对比处理,还需要知道今天,昨天,前天,上周今天,上月今天,本月,上月,本年,上年,上年今天的数据,所以还需要加载datetime包。

    下面来一步步对我的代码拆分:
    第一步:读取数据

import pandas as pd
result1 = pd.read_csv("D:\\pythondata\\hue\\csv\\query_result.csv")

    第二步:修改列名
result1.columns =['date','platfrom','behavior','num','invite','real','bind','updatetime','updatedate']

    第三步:指定时间

import datetime
now=datetime.datetime.now() """今天"""
now.weekday()"""今天是周几"""
today=now.strftime('%Y-%m-%d') """今天的年月日格式"""
yesday=(now-datetime.timedelta(days=1)).strftime('%Y-%m-%d')"""昨天的年月日格式"""
beforeday=(now-datetime.timedelta(days=2)).strftime('%Y-%m-%d')"""前天的年月日格式"""
lastweekday=(now-datetime.timedelta(days=7)).strftime('%Y-%m-%d')"""上周今天的年月日格式"""
lastweekyesday=(now-datetime.timedelta(days=8)).strftime('%Y-%m-%d')"""上周昨天的年月日格式"""
thismonth=now.strftime('%Y-%m')"""本月的年月格式"""
lastmonth=(datetime.datetime(now.year, now.month, 1)-datetime.timedelta(days=1)).strftime('%Y-%m')"""上月的年月格式"""
thisyear=now.strftime('%Y')"""今年的年格式"""
lastyear=(datetime.datetime(now.year, 1, 1)-datetime.timedelta(days=1)).strftime('%Y')"""去年的年格式"""

    第四步:调用数据
a1=int(result1.num[result1.updatedate==today][result1.date==yesday][result1.behavior=='注册'].sum()) """当天注册人数"""
a2=int(result1.real[result1.updatedate==today][result1.behavior=='累计'].sum()-result1.real
[result1.updatedate==yesday][result1.behavior=='累计'].sum())"""当天实名人数"""
a3=int(result1.bind[result1.updatedate==today][result1.behavior=='累计'].sum()-result1.bind[result1.updatedate==yesday][result1.behavior=='累计'].sum())"""当天绑卡人数"""
a4=int(result1.num[result1.date==yesday][result1.behavior=='交易'].sum())"""当天交易人数"""
a5=int(result1.invite[result1.date==yesday][result1.behavior=='交易'].sum())"""当天邀请交易人数"""
a6=round(float(result1.num\
    [result1.updatedate==today]\
    [result1.date.apply(lambda x: x[:7]) == (datetime.date.today()-datetime.timedelta(days=1)).strftime('%Y-%m')]\
    [result1.behavior=='交易'].sum()/10000),2)"""当月实名人数"""


    第五步:准备发送邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = '[email protected]'
mail_host="smtp.exmail.qq.com"#设置服务器
mail_user=sender#用户名
mail_pass="123"#口令
receivers = ['[email protected]']

mail_msg="""
%s%s


%s


                  %s%d%s


                  %s%d%s


                  %s%d%s


                  %s%d%s


                  %s%d%s


          %s %s%.2f%s



"""% (datetime.date.today()-datetime.timedelta(days=1),'日报情况','业务线:,'注册用户数:',a1,'人','实名用户数:',a2,'人','绑卡用户数:',a3,'人(后台绑卡数据不全)','新增交易用户数:',a4,'人','新增邀请交易用户数:',a5,'人'
,'交易用户','当月新增交易用户数:',a6,'万人')
message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("计划与分析中心",'utf-8')
message['To'] =  Header("资金运营",'utf-8')
subject = '玖富资金端日报'
message['Subject'] = Header(subject, 'utf-8')
try:   
    server=smtplib.SMTP_SSL(mail_host, 465)  # 发件人邮箱中的SMTP服务器,端口是465
    server.login(mail_user,mail_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
    server.sendmail(sender,receivers, message.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
    server.quit()  # 关闭连接
    print ("邮件发送成功")
except smtplib.SMTPException:
    print ("Error: 无法发送邮件")

其中s%代表字符串变量,d%代表整数变量,f%代表浮点变量,.2f%代表浮点变量展示两位小数。

具体代码可以到我的码云中查看:https://gitee.com/goskiller/codes/926bxhml13inqcfud0twr74

你可能感兴趣的:(算法,python,python,邮件)