server task怎么用_自动化篇:用python发送定时邮件

256a631a34412212988c51ae3dcd5c83.png

很多数据分析师的工作的流程:

(1)数据库取数-->(2)根据业务主题分析汇总数据-->(3)邮件汇报分析结果。

对于1、2步而言,一般都是使用python或者R语言编写程序进行任务处理(也可以是Scala等处理spark平台的海量数据)

通常情况下对于相似主题的数据分析任务,可以重复使用之前的程序。比如业务决策层想每天10点准时看某项业务的数据表现,此时分析的任务就是固定的,如果不会自动定时发邮件,那就要求分析师每天10点准时统计数据,并且手动编写邮件内容、添加附件后发送邮件,这听起来不是高效的方式。试想如果每天花5-10分钟在编写重复结构的邮件上,一年下来就是30-60小时,如果会自动发邮件,这笔时间就省下来了。

此文算是之前写的文章python操作Excel实现自动化报表自动化报表的补充

废话不多说,上代码:

实现邮件功能的脚本 main.py:

# -*- coding: utf-8 -*-
"""
@author: heting
"""
import smtplib 
import email
from  email.mime import multipart# import MIMEMultipart  
from  email.mime import text# import MIMEText  
from  email.mime import base# import MIMEBase  
import os.path
import mimetypes

#邮箱认证
#"username": "***@***.com",
#"password": "******",
def Send_email(file_name_list,email_text,recei_list):
    mail_info = {
        "from": "***@***.com",#自己的邮箱账号
        "to": "***@***.com",#接收邮件的对方账号
        "hostname": "smtp.exmail.qq.com",
        "username": "***@***.com",#开通smtp服务的邮箱账号
        "password": "******",#开通smtp服务的对应密码
        "mail_subject": "test",
        "mail_text": "hello, this is a test email, sended by python",
        "mail_encoding": "utf-8"
    }
    
    server = smtplib.SMTP_SSL(mail_info["hostname"],port=465)
    server.ehlo(mail_info["hostname"])
    server.login(mail_info["username"],mail_info["password"])#仅smtp服务器需要验证时

    # 构造MIMEMultipart对象做为根容器
    main_msg = multipart.MIMEMultipart()
    # 构造MIMEText对象做为邮件显示内容并附加到根容器  
    text_msg = text.MIMEText(email_text,_charset="utf-8")  
    main_msg.attach(text_msg)

    # 构造MIMEBase对象做为文件附件内容并附加到根容器
    for file_name in file_name_list:
        ## 读入文件内容并格式化 [方式1]
        data = open(file_name, 'rb')
        ctype,encoding = mimetypes.guess_type(file_name)
        if ctype is None or encoding is not None:
            ctype = 'application/octet-stream'
        maintype,subtype = ctype.split('/',1)
        file_msg = base.MIMEBase(maintype, subtype)
        file_msg.set_payload(data.read())
        data.close()
        email.encoders.encode_base64(file_msg)#把附件编码

        ## 设置附件头
        basename = os.path.basename(file_name)
        file_msg.add_header('Content-Disposition','attachment', filename = basename,encoding='utf-8')
        main_msg.attach(file_msg)
    # 设置根容器属性
    main_msg['From'] = mail_info['from']  
    main_msg['To'] = ';'.join(recei_list)
    main_msg['Subject'] = email_text
    main_msg['Date'] = email.utils.formatdate()  

    #得到格式化后的完整文本
    fullText = main_msg.as_string() 

    #用smtp发送邮件
    try:
        server.sendmail(mail_info['from'], recei_list, fullText)  
    finally:
        server.quit()

备注:关于邮箱如何开通smtp服务可以参考QQ邮箱的:https://jingyan.baidu.com/article/6079ad0eb14aaa28fe86db5a.html

类似的可以网上搜索如何开通所使用类型邮箱的smtp服务。

实现定时功能的脚本 timer.py:

# -*- coding: utf-8 -*-
"""
@author: heting
"""
# 以需要的时间间隔执行某个命令 
import time, os 
import logging
def re_exe(cmd_list, inc = 10): 
    while True: 
        ts_start = datetime.datetime.now()
        if ts_start.hour==10:#每天10点定时运行task脚本
            for cmd in cmd_list:
                os.system(cmd);
                logging.info('update sucess!-->%s分割线----------'%ts_start.strftime('%Y%m%d %H:%M:%S'),'n')
        time.sleep(inc)

cmd_list = ['python task.py']
re_exe(cmd_list, 10)

实现数据分析任务的脚本:task.py

#此处发送2张dataframe样表为例,应该放入实际的数据分析任务代码
from pandas import DataFrame
from main import Send_email
import datetime
import os
os.chdir('./')

df1 = DataFrame({'type':['a','b','c','d'],'value':[1,2,3,4]})
df2 = DataFrame({'type':['e','f','g','h'],'value':[5,6,7,8]})
df1.to_excel('df1.xlsx')
df2.to_excel('df2.xlsx')

#将2张表邮件发送
file_name_list = ['df1.xlsx','df2.xlsx']
email_text = "%s数据分析结果"%datetime.datetime.now().strftime('%Y%m%d %H')
recei_list = ['12345678@qq.com','66666666@qq.com']#写上自己的邮箱测试一下
Send_email(file_name_list,email_text,recei_list)

打印一下df1和df2表具体内容:

type  value
0    a      1
1    b      2
2    c      3
3    d      4

  type  value
0    e      5
1    f      6
2    g      7
3    h      8

最后我们只需要在后台运行timer.py就OK了,收件列表里面的邮箱用户就能每天定时收到这两张表了,

不用守着电脑发邮件了 ,把省出来的时间听听音乐或者学习新技能吧!

如果您觉得有帮助的话,可以扫码,赞赏鼓励一下!谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值