zoukankan      html  css  js  c++  java
  • 自动发送日报,骗过你的领导^-^

    作为一个大(忘)忙(事)人(佬),每天写日报这种事儿简直就是种折磨。

    而碰巧领导又让你天天写日报,这不是要了老命了吗,所以咯,殚精竭虑之后,本人写了个自动发送周报的程序,每天定时发送一封写的声色俱全的日报给领导。

    切入正题吧。

    程序是用python写的发送email的程序,使用shell写的逻辑,使用linux服务器制定定时任务定时发送。

    括弧 自己拥有服务器的土豪可以自己在服务器上装mail命令,就不用自己写邮件发送程序了,由于使用公共服务器,并没有安装程序的权限,所以自己用python写了邮件发送程序。

    整个程序的目录结构是这样的

    drwxrwxr-x  2 * * 4096 Jul 28 17:17 ./
    drwxr-xr-x 15 * * 4096 Jul 28 17:17 ../
    -rw-rw-r--  1 * *  288 Jul 28 12:10 rlist    #工作内容列表,用来在自己忘了填充内容的时候随机编造工作内容
    -rw-rw-r--  1 * *    0 Jul 28 13:00 send.log   #执行log查看给领导发送的邮件内容,免得漏了陷
    -rwxrwxr-x  1 * *  527 Jul 28 17:17 sendmail.sh*  #手写邮件发送程序 有mail程序的服务器可以不用这个文件
    -rwxrwxr-x  1 * * 1082 Jul 28 17:05 send.py*    #发送邮件的主程序
    -rw-rw-r--  1 * *   34 Jul 28 17:10 today      #发送邮件的今日工作内容
    -rw-rw-r--  1 * *   93 Jul 28 17:14 tomorrow    #发送邮件的昨日工作内容  

     rlist 就是个列表,里面随便编上几十个工作内容。越多越好,越详细越好。

    回顾代码
    优化后台功能
    重构代码
    修改bug
    检查代码性能
    回顾代码
    优化后台功能
    重构代码
    修改bug
    检查代码性能
    回顾代码
    优化后台功能
    重构代码
    修改bug
    检查代码性能

     发送邮件的程序,可以使用mail命令代替

    # -*- coding: utf-8 -*-
    
    from email import encoders
    from email.header import Header
    from email.mime.text import MIMEText
    from email.utils import parseaddr, formataddr
    import smtplib
    import argparse
    import time
    
    parser = argparse.ArgumentParser()
    parser.add_argument("content")
    args = parser.parse_args()
    
    
    times  = time.strftime('%Y-%m-%d',time.localtime(time.time()))
    
    content = args.content
    
    def _format_addr(s):
        name, addr = parseaddr(s)
        return formataddr(( 
            Header(name, 'utf-8').encode(), 
            addr.encode('utf-8') if isinstance(addr, unicode) else addr))
    
    from_addr = "***********"
    password = "*********"
    to_addr = "***********"
    smtp_server = "*********"
    
    msg = MIMEText(content, 'html', 'utf-8')
    msg['From'] = _format_addr(u'***** <%s>' % from_addr)
    msg['To'] = _format_addr(u'**** <%s>' % to_addr)
    msg['Subject'] = Header(u'【日报】'+times, 'utf-8').encode()
    
    server = smtplib.SMTP(smtp_server, 25)
    server.login(from_addr, password)
    server.sendmail(from_addr, [to_addr,"****抄送一份给自己****"], msg.as_string())
    server.quit()
    ~                 

    接下来就是整个程序的逻辑了

    #! /bin/bash
    # 随机数生成方法 function rand(){ min=$1 max=$(($2-$min+1)) num=$(($RANDOM+1000000000)) #增加一个10位的数再求余 echo $(($num%$max+$min)) } echo "开始发送邮件"
    #进入程序所在的目录
    cd /***/***/***/sendEmail
    #接下来的两行代码目的是为了随机一个半小时之内的休息时间,这样每次领导收到日报的时间都不一样,所以更难猜到是定时发送任务。 slt
    =`rand 1 1800 ` sleep $slt

    #判断明日目标是否存在,不存在的话从理由列表中随机出一份
    if [ -f tomorrow ];then to=$(cat tomorrow) else l=`rand 1 10` to=$(sed -n $l'p' rlist) echo $to > tomorrow fi
    #从today中拿取今日目标 tod
    =$(cat today)
    #将明日目标和今日目标合成一个内容 content
    ="今日任务:<br/>"$tod"<br/>明日任务:<br/>"$to
    #删除今日目标(因为已经没用啦) rm today
    #将明日目标改名为今日目标(废话 今天的明天不就是明天的今天吗) mv tomorrow today
    #发送邮件(如果用mail命令修改这一行就行啦) python2.
    7 send.py $content
    #往log里面打印一条成功信息 echo $content
    "发送成功"

    整体来说,程序的用法是,如果自己记得需要发日报这回事,就赶紧上服务器上写一份明日工作计划放到tomorrow文件里面,如果忘了呢就是自动从rlist列表里面随机出一份,然后随机一个时间给领导发过去,让领导觉得你是一个比较规律发日报的好同志!

    最后的最后,设定一个定时器,让这个程序每天定时执行就行了

    shell里面输入

    crontab -e

    然后添加这么一条信息就ok了

    30 17 * * * /***********/sendEmail/sendmail.sh >> /**********/sendEmail/send.log 2>&1
  • 相关阅读:
    Java Web idea Filter配置(过滤器配置)
    JAVA中一些定时器的使用
    数据库事务的四大特性
    SQL语句中----删除表数据drop、truncate和delete的用法
    什么是索引?Mysql目前主要的几种索引类型
    MySQL练习题
    测试6--模拟两人在对话1000次
    实验室每日一题WP-12月7日
    实验室每日一题WP-12月5日
    实验室每日一题WP-12月4日
  • 原文地址:https://www.cnblogs.com/wencheng256/p/zidongribao.html
Copyright © 2011-2022 走看看